首页 > 编程语言 >Java并发三大问题之可见性

Java并发三大问题之可见性

时间:2023-02-11 15:33:20浏览次数:45  
标签:Java 读取 并发 线程 内存 L1 L2 三大 变量

 

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 会把该线程对应的本地内存置为⽆效。线程接下来将从主内存中读取共享变量。

 

标签:Java,读取,并发,线程,内存,L1,L2,三大,变量
From: https://www.cnblogs.com/hx-web/p/17111778.html

相关文章