1.什么是Java内存模型
Java内存模型描述了线程该如何和内存进行交互。多核、不同jvm实现以及不同的cpu,这是java代码运行的环境。如何让这些因素对用户透明并且保证程序运行正确是java内存模型需要解决的问题。
2.JSR 133
最早的jmm是95年提出的,但是已经无法满足需要。jsr133更新了jmm,jsr133可以参考大神 Doug Lea的文章。这篇文章是为编译器编写者写的一份指南,里面的内容很丰富,当然也很难懂。Java Concurrency In Practice的作者的文章也是非常的棒的。
3.指令重排
学过计算机体系结构的,大概都知道现代cpu是流水线的,但是两个指令之间会存在这依赖关系,所以需要进行优化。指令的重排(instruction reordering)就是一种优化的方式。指令重排可能是编译器在编译的时候就帮我们做好的,有的是jvm在执行的时候帮我们做的。
4.Double-Checked Locking is Broken
volatile关键字到底做了什么?很多人会和你说内存可见性,仅仅是这个吗?那你可能需要读一下这篇文章了。这篇文章提到了volatile还会防止指令重排。
5.Atomic包里面的set vs lazySet
官方关于这个方法的介绍简直少得你怀疑人生,不过可以参考一下stack。