1)程序次序规则(Program Order Rule):在一个线程内,按照控制流顺序,书写在前面的 *** 作先行发生(Happens-before)于书写在后面的 *** 作。注意,这里说的是控制流顺序而不是程序代码顺序,因为要考虑分支、循环等结构。
2)管程锁定规则(Monitor Lock Rule):一个 unlock *** 作先行发生于后面对同一个锁的 lock *** 作。这里必须强调的是 “同一个锁”,而 “后面” 是指时间上的先后。
3)volatile 变量规则(Volatile Variable Rule):对一个 volatile 变量的写 *** 作先行发生于后面对这个变量的读 *** 作,这里的 “后面” 同样是指时间上的先后。
4)线程启动规则(Thread Start Rule):Thread 对象的 start() 方法先行发生于此线程的每一个动作。
5)线程终止规则(Thread Termination Rule):线程中的所有 *** 作都先行发生于对此线程的终止检测,我们可以通过 Thread 对象的 join() 方法是否结束、Thread 对象的 isAlive() 的返回值等手段检测线程是否已经终止执行。
6)线程中断规则(Thread Interruption Rule):对线程 interrupt() 方法的调用先行发生于被中断线程的代码检测到中断事件的发生,可以通过 Thread 对象的 interrupted() 方法检测到是否有中断发生。
7)对象终结规则(Finalizer Rule):一个对象的初始化完成(构造函数执行结束)先行发生于它的 finalize() 方法的开始。
8)传递性(Transitivity):如果 *** 作 A 先行发生于 *** 作 B, *** 作 B 先行发生于 *** 作 C,那就可以得出 *** 作 A 先行发生于 *** 作 C 的结论。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)