图文

volatile关键字

volatile关键字:原封面
文章目录4 节

本文发表已超过一年,部分内容可能已过时。

介绍

在多线程操作共享变量时, 会使用volatile修饰共享变量, 比如单例模式的双重锁检查中, 并且在concurrent包下也大量使用了volatile关键字; volatile可以对类属性进行修饰, 从而确保线程每次都是从主存中获取属性, 操作完毕后写回主存.

java内存模型

volatile关键字正文示意图 1

在多线程同时对共享变量进行操作过程中, 每个线程会拷贝一份共享变量到自己的工作内存中进行相关操作, 操作完毕后会将结果写入到主存中. 而volatile关键字可以保证操作的可见性和有序性, 但是却不能保证原子性.

扩展

原子性

指一个操作或者多个操作要么全部执行要么全部都不执行, 操作过程整体是一个原子, 不被分割打断.

可见性

当多个线程访问同一个变量时, 一个线程修改了这个变量的值, 其他线程能够立即看得到修改的值.

有序性

即程序执行的顺序按照代码的先后顺序执行 主要原因是因为处理器在处理程序时会进行指令重排, 对代码进行优化, 指令重排在单线程中得到的结果是一致的, 但是在多线程中就会造成各种错误.

volatile关键字作用

1.使用volatile关键字修饰的变量,会强制将修改的值写入到主存中 2.volatile不保证原子性, 在多线程操作下仅能保证操作别的线程可见, 在多线程情况下同时操作共享变量依然会有数据不正确的情况. 3.volatile会防止指令重排

打开原图

订阅更新,继续阅读新的实践记录

最近发布

评论

隐私提示

昵称、网址和评论内容会公开显示,邮箱不公开。请勿在评论中填写敏感信息。