时间先后顺序于先行发生没有绝对关系,一切以先行发生原则为主。
1. 程序次序原则。同一个线程内,按照程序代码顺序先后执行。
2. 管道锁定规则。一个unlock操作先行于后面对同一个锁的lock操作。强调的是同一个锁,后面指的是时间顺序。
3. volatile变量规则。对于一个volatile变量的写操作先行发生于后面对这个变量的读操作,后面同样指时间顺序。
4. 线程启动规则。Thread对象的start方法优先于此线程的每一个动作。
5. 线程终止规则。线程中的所有操作先行于对此线程的终止检测。
6. 线程中断规则。对线程interrupt方法的调用先行于被中断线程的代码检测到中断事件的发生。通过Thread.interrupted()方法检测到是否有中断。
7. 对象终结规则。一个对象的初始化完成先行于他的finalize方法。
8. 传递性规则。A先行于B,B先行于C,则A先行于C。