class S {
public int x = 100;
}
class T {
public void do(S s){
new Thread( () -> {
System.out.println(s.x);
};).start();
}
}
class M {
public static void main(String[] args){
T t = new T();
S s = new S();
s.x = 101;
t.do(s);
}
}
你好
是否保证T::do
总是看到s.x == 101?为什么是,为什么不是?
预先感谢您的帮助。
答案 0 :(得分:3)
启动线程时,这会引入内存屏障,在启动线程之前发生的任何事情都将可见。注意:从计算机角度来讲,启动线程需要很长时间。
BTW System.out.println是一种同步方法,它添加了完整的读/写内存屏障,尽管在这种情况下,这无关紧要/