1. 首页
  2. 编程语言
  3. Java
  4. Java内存模型(JMM)及happens-before原理

Java内存模型(JMM)及happens-before原理

上传者: 2022-04-27 08:18:42上传 PDF文件 141.21 KB 热度 27次

处理器可能采用乱序或者并行的方式来执行指令。上面提到的种种可能都会导致在多线程环境中产生不同的结果。而JMM就是JVM中必须遵守的一组最小保证,它规定了对于变量的写入操作在什么时候对其他线程是可见的。有可能one在two之前执行,也有可能在two之后执行,也可能两者同时执行。如果两个操作不满足happens-before的关系,那么JVM可以对他们任意重排序。这种方式叫做提前初始化。上面的类中检测了两次bookDLC的值,只有bookDLC为空的时候才进行加锁操作。看起来一切都很完美,但是我们要注意一点,这里bookDLC一定要是volatile。因为bookDLC的赋值操作和返回操作并没有happens-before,所以可能会出现获取到一个仅部分构造的实例。

用户评论