上一篇说了线程池,这一篇说可见性。先抛结论:volatile 解决的是可见性和有序性,不解决原子性。
一个经典的反例
两个线程各自 i++ 一万次,结果几乎永远不会是两万。原因不是锁,是 i++ 本身是读-改-写三步。
happens-before
理解 JMM 的钥匙是 happens-before 原则……
(写作中,本周更新完。)
上一篇说了线程池,这一篇说可见性。先抛结论:volatile 解决的是可见性和有序性,不解决原子性。
两个线程各自 i++ 一万次,结果几乎永远不会是两万。原因不是锁,是 i++ 本身是读-改-写三步。
理解 JMM 的钥匙是 happens-before 原则……
(写作中,本周更新完。)