Java并发三大问题之可见性

 

JMM中的L1和L2缓存虽然较好地缓解了CPU与内存之间巨大的读取速度差异带来的cpu使用率过低问题,但是同时却不可避免的带来了其它方面问题,比如可见性问题,⼀个线程对共享变量的修改,另外⼀个线程能够⽴刻看到,我们称为可⻅性。譬如主内存中有一个静态变量 x=0,线程A通过复制将x=0先复制到L2再复制到L1进行加一计算,此时线程B也进行同样操作,将x=0先后拷贝到L2和L1,后加一计算,正常情况下我们预期得到的结果是x=2,但是有些情况下却不然,线程A执行加一操作以后还没来得及将x=1回写到主内存和L2中线程B就从L2读取x=0,这样一下来最终得到的结果是x=1,要解决这种可见性问题就要用到关键字volatile;

当读⼀个 volatile 变量时, JMM 会把该线程对应的本地内存置为⽆效。线程接下来将从主内存中读取共享变量。

 

posted @   HexThinking  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示