DeathWhispers

死磕Java并发:Java内存模型之从JMM角度分析DCL

1. 问题分析 我们先看单例模式里面的懒汉式: 我们都知道这种写法是错误的,因为它无法保证线程的安全性。优化如下: 优化非常简单,就是在#getInstance()方法上面做了同步,但是synchronized就会导致这个方法比较低效,导致程序性能下降,那么怎么解决呢?聪明的人们想到了双重检查 DCL: 就如上面所示,这个代码看起来很完美,理由如下: 如果检查第一个singleto...

死磕Java并发:Java内存模型之happens-before

https://www.iocoder.cn/JUC/sike/happens-before/ 在上篇博客(《【死磕 Java 并发】—– 深入分析 volatile 的实现原理》)中,LZ 提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程 A 修改了变量 a ,何时对线程 B 可见? 我们无法就所有场景来...