线程和锁这种并发模型,会带来三个副作用:
- 竞争条件
- 死锁
- 内存可见性
可以通过下面的一些方法来避免副作用:
- 对共享的变量访问都需要同步化
- 读线程和写线程需要同步化
- 按照一定顺序获取多把锁
- 持有锁的时间尽可能短
- 当持有锁是避免调用外星方法
双重检查锁模式
java内存模型 JSR133
https://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html
https://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html