如下所示,该程序有一个共享变量,flag但不带volatile:
public class T {
public static void main(String[] args) {
TT jump = new TT(() -> {
while (true) {
if (TT.flag) {
System.out.println("jump");
break;
}
}
});
jump.start();
new TT(() -> {
TT.flag = true; // P1
LocalDateTime t1 = LocalDateTime.now();
while (true) {
if (Duration.between(t1, LocalDateTime.now()).toMillis() > 100) {
break;
}
}
System.out.println("flag");
}).start();
}
static class TT extends Thread {
public static boolean flag = false;
public TT(Runnable o) {
super(o);
}
}
}
程序总是正常返回。所以我相信设置为 的行已P1在其他线程中更新。flagtrueflag
但为什么?flag不是易失性的,为什么它的值会立即更新?总是!
泛舟湖上清波郎朗
相关分类