1.Java内存模型
导致可见性的原因是CPU缓存、导致有序性的原因是编译器优化,那么按需禁用缓存和编译优化就有了一定的必要,但是该如何按需禁用呢?
对于程序员而言,如何做到按需禁用呢?JVM会提供相关方法给程序员。
站在程序员的视角,本质上可以理解为,Java内存模型提供了禁用缓存和编译器优化的方法和规范。这些方法包括:
关键字:
- final关键字
- synchronized
- volatile
六项Happens-Before规则等
2.Happens-before规则
如何理解Happens-before规则呢,其并不是说前一个操作一定发生在后一个操作前面,通俗来说就是:前面一个操作的结果对后一个操作是可见的。也就说前面对共享变量进行操作,后面操作针对该共享变量是可见的
具体规则包括如下:
- 程序的顺序性规则
- volatile规则
- 传递性
- 管程中的锁的规则:这条规则是指对一个锁的解锁 Happens-Before 于后续对这个锁的加锁
- 线程start()规则
- 线程join()规则