1. 首页
  2. 编程语言
  3. Java
  4. 深入理解happens-before和as-if-serial语义

深入理解happens-before和as-if-serial语义

上传者: 2021-07-31 02:46:45上传 PDF文件 309.27 KB 热度 7次

从Java源代码到最终实际执行的指令序列,会分别经历下面3种重排序:从JDK 5开始,Java使用新的内存模型,使用happens-before的概念来阐述操作之间的内存可见性。编译器、runtime和处理器都必须遵守as-if-serial语义。这里假设有两个线程A和B,A首先执行writer()方法,随后B线程接着执行reader()方法。程序执行时,线程A首先写标记变量flag,随后线程B读这个变量。为此,编译器和处理器会采用猜测执行来克服控制相关性对并行度的影响。当操作3的条件判断为真时,就把该计算结果写入变量i中。猜测执行实质上对操作3和4做了重排序,在这里重排序破坏了多线程程序的语义!

用户评论