版权声明:送人玫瑰,手有余香,一分也是爱 https://blog.csdn.net/m0_37156901/article/details/85866998
一个线程观察其他线程的指令执行顺序,由于指令重排序的存在,这个观察结果杂乱无序,如果两个操作的执行次序无法从这八条规则中得出,就不能保证他们的有序性,虚拟机就可以随意打乱两个指令,对他们重排序。
后两个关键字保证一次执行,可以实现有序性,但是java内存模型先天也是有序的,
这是因为happens - before 原则-- 先行发生原则–八条原则(深入理解java虚拟机书)
happens - before 原则
happens - before 原则-- 先行发生原则–八条原则(深入理解java虚拟机书)
JVM会对指令进行重排序,只会对程序不进行数据依赖的指令重排序,能保证在单线程中正确执行,却无法保证多线程正确。
前四条重要,后四条显而易见
这两个主要介绍了线程的操作,
如果两个操作的执行次序无法从这八条规则中得出,就不能保证他们的有序性,虚拟机就可以随意打乱两个指令,对他们重排序。
线程安全性-总结
三大特征介绍完了
原子性:互斥操作
可见性:
有序性:happens - before 原则
一个线程观察其他线程的指令执行顺序,由于指令重排序的存在,这个观察结果杂乱无序,如果两个操作的执行次序无法从这八条规则中得出,就不能保证他们的有序性,虚拟机就可以随意打乱两个指令,对他们重排序。