
尚硅谷
程序员fly
希望和你一起学习
展开
-
Volatile指令重排
Volatile禁止指令重排 计算机在执行程序时候,为了提高性能,编译器和处理器常常会对编译器进程优化,一般分为以下三种 源代码->编辑器优化的重排–>指令并行的重排->内部系统工单重排–>最终执行指令 单线程环境里面确保最终执行结果和代码顺序的结构一致 处理器在进行重排时候,必须要考虑指令之间的数据依赖性 多线程环境中线程交替执行,由于编译器优化重排的存在,两个线程使用的变量能否安保证一致性无法确定,结果无法预测 指令重排的例子 public class ResortSeqDe原创 2020-10-22 15:10:05 · 311 阅读 · 0 评论 -
Volatile为什么不保证原子性
Volatile不保证原子性 原子性的相关概念 我们经常提到的就是事务具备原子性,其实原子性简单理解就是某一个线程在进行具体业务的时候,中间不能被分割,要不同时成功,要么同时失败 代码验证 MyData myData = new MyData(); //创建20个线程,线程里面进行1000次循环 for (int i = 1; i <= 20 ; i++) { new Thread(()->{原创 2020-10-21 14:37:31 · 706 阅读 · 0 评论