【发布时间】:2021-04-01 08:26:38
【问题描述】:
public class Test {
private static volatile boolean flag = false;
private static int i = 1;
public static void main(String[] args) {
new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
flag = true;
i += 1;
}).start();
new Thread(() -> {
while (!flag) {
if (i != 1) {
System.out.println(i);
}
}
System.out.println(flag);
System.out.println(i);
}).start();
}
}
变量i写在volatile变量标志之后,但代码输出true 2。看来第一个线程对i的修改对第二个线程可见。
根据我的理解,变量i应该写在flag之前,这样第二个线程才能知道变化。
【问题讨论】:
标签: java multithreading parallel-processing volatile