happens-before规则简单易懂,避免java程序员为理解JMM提供的可见性保证而去学习复杂的重排序规则。       

        在JMM(java内存模型)中,一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系。这里提到的两个操作既可以是一个线程之内,也可以是不同线程之间。

  1.  程序顺序原则:一个线程的每个操作,happens-before于该线程中的任意后续操作。
  2. 监视器锁原则:对一个锁的解锁操作,happens-before后续对这个锁的加锁操作。
  3. volatile变量原则:对一个volatile变量的写操作,happens-before后续对这个变量的读操作。
  4. 传递性:如果A happens-before B,B happens-before C,那么A happens-before C。
  5. start()规则:如果线程A执行操作ThreadB.start()(启动线程B),那么线程A的threadB.start()操作happens-before于线程B中任意操作。
  6. 线程终止规则:线程的所有操作都happens-before对此线程的终止检测。可以通过Thread.join()方法结束、Thread.isAlive()的返回值等手段检测到线程已经终止执行。
  7. 线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生;
07-26 19:08