小编Han*_*ter的帖子

如何理解JSR-133 Happens-Before太弱了图6/7

在JSR-133中,有两个例子可能是状态正确同步的程序.

第一个例子如图6所示,其中:

x == y == 0
Run Code Online (Sandbox Code Playgroud)

然后,线程1通过以下方式修改状态:

r1 = x; 
if (r1 != 0) 
y = 1; 
Run Code Online (Sandbox Code Playgroud)

和线程2通过以下方式修改状态:

r2 = y;
if (r2 != 0)
x = 1;
Run Code Online (Sandbox Code Playgroud)

作者声明该程序已正确同步,但是,此程序的执行会导致r1 == r2 == 1.后一个价值怎么可能呢?

此外,图7表示初始状态:

x == y == 0
Run Code Online (Sandbox Code Playgroud)

用线程1修改:

r1 = x; 
y = r1; 
Run Code Online (Sandbox Code Playgroud)

和线程2执行:

r2 = y;
x = r2;
Run Code Online (Sandbox Code Playgroud)

怎么会导致这种情况r1 == r2 == 42?

java java-memory-model

6
推荐指数
1
解决办法
199
查看次数

标签 统计

java ×1

java-memory-model ×1