JVM 之java内存模型( 三 )


3.volatile规则:对一个volatile变量的写操作先行发生于后面对这个变量的读取操作 , 这里的”后面“同样指时间上的先后顺序 。
4.线程启动规则:Thread对象的start()方法先行发生于此线程的每一个动作 。
5.线程终于规则:线程中的所有操作都先行发生于对此线程的终止(Thread.join())
6.线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生 , 可以通过Thread.interrupted()方法检测是否有中断发生 。
7.对象终结规则:一个对象初始化完成(构造方法执行完成)先行发生于它的finalize()方法的开始 。
8.传递性规则:如果操作A先行发生于操作B , 操作B先行发生于操作C , 那就可以得出操作A先行发生于操作C的结论 。
这是程序中天然存在的先行发生关系 , 可以在编码中直接使用 , 如果2个操作的关系不在此列 , 或者由这些规则无法推导出来 , 它们就没有顺序性保障 , 虚拟机可以对它们进行任意的重排序 。


推荐阅读