摘要: 看 "java并发编程的艺术" 第3.8 双重检查锁定与延迟初始化 在Java多线程程序中,有时候需要采用延迟初始化来降低初始化类和创建对象的开销。双重检查锁定是常见的延迟初始化技术,但它是一个错误的用法。本文将分析双重检查锁定的错误根源,以及两种线程安全的延迟初始化方案。 需要注意的是, 双重检查 阅读全文
posted @ 2019-04-29 19:41 九涯 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 从JDK 5 开始,JMM就使用happens-before的概念来阐述多线程之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见, 那么这2个操作之间必须要存在happens-before关系。这里提到的2个操作既可以是一个线程之内,也可以是不同线程之间。 阅读全文
posted @ 2019-04-29 17:58 九涯 阅读(590) 评论(0) 推荐(0) 编辑
摘要: as-if-serial语义的意思指: 不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。编译器,runtime 和处理器都必须遵守as-if-serial语义。为了遵守as-if-serial语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序 阅读全文
posted @ 2019-04-29 17:46 九涯 阅读(5843) 评论(1) 推荐(1) 编辑