程序执行的顺序按照代码的先后顺序执行,在Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性
有序性保障volatile:先行发生(happens-before)原则
synchronized:同一个时间只能有一个线程获得锁
先行发生(happens-before)原则JMM中两项操作之间的偏序关系,如果操作A发生于操作B之前,操作A发生的影响可以被操作B观察到
单线程和正确同步的多线程的执行结果不会被改变
规则如果两个操作不在下列规则中,虚拟机可以对其重排序
程序次序规则:在一个线程内按控制流顺序
管程锁定规则:锁的unlock操作先发生于后面同一个锁的lock操作
volatile变量规则:一个volatile变量的写操作先行于后面发生的这个变量的读操作
线程启动规则:start()先发生于此线程的每一个操作
线程终止规则:线程的所有操作都先发生于线程终止操作
线程中断规则:对线程interrupt()方法先行于被中断线程的代码检查到中断事件的发生
对象终结规则:一个对象初始化完成先发生于它的finalize()方法的开始
传递性:操作A在操作B前,操作B在操作C前,操作A一定在操作C前
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx