规则
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;amp;lt;span style=amp;quot;color:#ff0000;amp;quot;amp;gt;amp;nbsp;amp;nbsp; 1、程序次序规则:在一个单独的线程中,按照程序代码的执行流顺序,(时间上)先执行的操作happen—before(时间上)后执行的操作。amp;lt;/spanamp;gt;amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;amp;lt;span style=amp;quot;color:#ff0000;amp;quot;amp;gt;2、管理锁定规则:一个unlock操作happen—before后面(时间上的先后顺序,下同)对同一个锁的lock操作。amp;lt;/spanamp;gt;amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;amp;lt;span style=amp;quot;color:#ff0000;amp;quot;amp;gt;amp;nbsp; 3、volatile变量规则:对一个volatile变量的写操作happen—before后面对该变量的读操作amp;lt;/spanamp;gt;amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt; 4、线程启动规则:Thread对象的start()方法happen—before此线程的每一个动作。amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt; 5、线程终止规则:线程的所有操作都happen—before对此线程的终止检测,可以通过Thread.join()方法结束、Thread.isAlive()的返回值等手段检测到线程已经终止执行。amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;amp;nbsp;6、线程中断规则:对线程interrupt()方法的调用happen—before发生于被中断线程的代码检测到中断时事件的发生。amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt; amp;nbsp; 7、对象终结规则:一个对象的初始化完成(构造函数执行结束)happen—before它的finalize()方法的开始。amp;lt;/spanamp;gt;
amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt; 8、传递性:如果操作A happen—before操作B,amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;操作B happen—before操作C,那么可以得出amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;Aamp;nbsp;amp;lt;/spanamp;gt;amp;lt;/spanamp;gt;amp;lt;/spanamp;gt;amp;lt;span style=amp;quot;font-family:amp;apos;Comic Sans MSamp;apos;;font-size:18px;amp;quot;amp;gt;happen—before操作C。amp;lt;/spanamp;gt;