并发编程(二)Java内存模型:解决可见性、有序性问题

1.Java内存模型

导致可见性的原因是CPU缓存、导致有序性的原因是编译器优化,那么按需禁用缓存和编译优化就有了一定的必要,但是该如何按需禁用呢?

对于程序员而言,如何做到按需禁用呢?JVM会提供相关方法给程序员。

站在程序员的视角,本质上可以理解为,Java内存模型提供了禁用缓存和编译器优化的方法和规范。这些方法包括:

关键字:

  • final关键字
  • synchronized
  • volatile

六项Happens-Before规则等

2.Happens-before规则

如何理解Happens-before规则呢,其并不是说前一个操作一定发生在后一个操作前面,通俗来说就是:前面一个操作的结果对后一个操作是可见的。也就说前面对共享变量进行操作,后面操作针对该共享变量是可见的

具体规则包括如下:

  1. 程序的顺序性规则
  2. volatile规则
  3. 传递性
  4. 管程中的锁的规则:这条规则是指对一个锁的解锁 Happens-Before 于后续对这个锁的加锁
  5. 线程start()规则
  6. 线程join()规则

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×