volatile和synchronized到底啥区别?
上图,每个核都有自己的一级缓存(L1 Cache),有的架构里面还有所有核共用的二级缓存(L2 Cache)。使用缓存之后,当线程要访问共享变量时,如果 L1 中存在该共享变量,就不会再逐级访问直至主内存了。所以,通过这种方式,就补上了访问内存慢的短板 具体来说,线程读/写共享变量的步骤是这样:
假设现在主内存中有共享变量 X, 其初始值为 0 线程1先访问变量 X, 套用上面的步骤就是这样:
此时,在线程 1 眼中,X 的值是这样的: 刻,如果线程 1 再次将 x=1回写,就会覆盖线程2 x=2 的结果,同样的共享变量,线程拿到的结果却不一样(线程1眼中x=1;线程2眼中x=2),这就是共享变量内存不可见的问题。 怎么补坑呢?今天的两位主角闪亮登场,不过在说明 volatile关键字之前,我们先来说说你最熟悉的 synchronized 关键字 synchronized 遇到线程不安全的问题,习惯性的会想到用 synchronized 关键字来解决问题,暂且先不论该办法是否合理,我们来看 synchronized 关键字是怎么解决上面提到的共享变量内存可见性问题的
二话不说,无情向下看 volatile
volatile (编辑:信阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |