为什么volatile在并发下也是线程不安全的

volatile修饰的变量在各个线程的工作内存中不存在一致性的问题(在各个线程工作的内存中,volatile修饰的变量也会存在不一致的情况,但是由于每次使用之前都会先刷新主存中的数据到工作内存,执行引擎看不到不一致的情况,因此可以认为不存在不一致的问题),但是java的运算并非原子性的操作,导致volatile在并发下并非是线程安全的。

最简单的例子就是多线程为一个变量连续赋值 每次做到 i++的问题。在进行加一的操作过程中,volatile关键字保证了变量i的值当前是正确的,但是在执行+1操作的指令的过程中,其他线程已经把i的值加大了,此时操作栈顶的值就变成了过期的数据。

猜你喜欢

转载自blog.csdn.net/laifu007/article/details/89850299