学堂 学堂 学堂公众号手机端

深入解析volatile关键字

lewis 1年前 (2024-04-19) 阅读数 10 #技术

深入解析volatile关键字

为什么volatile不保证原子性?
是因为num++在多线程下是非线程安全的。 num++方法编译成字节码后,分为以下三步运行的:

从主存中复制 i 的值并复制到 CPU 的工作内存中。CPU 取工作内存中的值,然后执行 i++操作,完成后刷新到工作内存。将工作内存中的值更新到主存。原本线程1在自己的工作空间中将num改为1,写回主内存,主内存由于内存可见性,通知线程2 3,num=1;线程2通过变量的副本拷贝,将num拷贝并++,num=2;再次写入主内存通知线程3,num=2,线程3通过变量的副本拷贝,将num拷贝并++,num=3; 然而 多线程竞争调度的原因,1号线程刚刚要写1的时候被挂起,2号线程将1写入主内存,此时应该通知其他线程,主内存的值更改为1,由于线程操作极快,还没有通知到其他线程,刚才被挂起的线程1 将num=1 又再次写入了主内存,主内存的值被覆盖,出现了丢失写值;

版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门