【发布时间】:2018-04-04 00:23:39
【问题描述】:
我正在观看来自 java jpoint 会议的视频。
我对@987654321@ 报告中的以下幻灯片有疑问:
对不起,幻灯片上的非英语。实际上作者说变量集是不可能的
r1 = 1 (Y)
r2 = 0 (x)
r3 = 1 (x)
r4 = 0 (Y)
根据视频,他暗示很明显。
有人能解释一下为什么这个值根据 JMM 设置是不可能的吗?
附言
如果我理解 Alexey 符号是正确的,它尊重以下代码:
public class SequentialConsistency {
static volatile int x;
static volatile int y;
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
x = 1;
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
y = 1;
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("r1=" + x + ", r2=" + y);
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("r3=" + x + ", r4=" + y);
}
}).start();
}
}
【问题讨论】:
-
当您的代码没有
volatile x,y;并且没有 r3 和 r4 时,为什么您的代码会正确表示幻灯片? -
@Erwin Bolwidt 我无法翻译你的问题。你能改写一下吗?
-
您的代码中的 x、y、r3 和 r4 在哪里?
-
哎呀,对不起。一瞬间
-
@Erwin,我更正了。我没有明确地创建 r1-r4 但我相信它显然是
标签: java multithreading concurrency volatile java-memory-model