volatile的特性可见性:可见性:保证不同线程对某个变量完成操作后结果及时可见,即该共享变量一旦改变所有线程立即可见诉求:1.线程中修改了自己工作内存中的副本之后,立即将其刷新到主内存;2.工作内存中每次读取共享变量时,都去主内存中重新读取,然后拷贝到工作内存。使用volatile修饰共享变量,就可以达到上面的效果,被volatile修改的变量有以下特点:1.线程中读取的时候,每次读取都会去主内存中读取共享变量最新的值,然后将其复制到工作内存2.线程中修改了工作内存中变量的副本,修改之后会立即刷新到主内存没有原子性:volatile变量不适合参与到依赖当前值的运算,如i =i+ 1; i++;之类的那么依靠可见性的特点volatile可以用在哪些地方呢?通常volatile用做保存某个状态的boolean值or int值。由于volatile变量只能保证可见性,在不符合以下两条规则的运算场景中,我们仍然要通过加锁(使用synchronized、java.util.concurrent中的锁或原子类)来保证原子性·运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值.
ZzRG
状态 统计 图床 • •