我想这与事前发生规则有关,但是我没有具体的解释...
我的问题是,是否保证线程“ thread”可以看到对“ Hello World”的nonFinalField引用?
而且不,我不想使nonFinalField最终化,并且以后也不会更新,因为也没有方法允许它。
希望我们可以通过合理的解释使这个例子神秘化。
先感谢您。
亲切的问候,
赫曼
public class Test2 {
private String nonFinalField;
public Test2() {
nonFinalField="Hello World";
}
void startThread() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("nonFinalField: " + nonFinalField);
}
});
thread.start();
}
public static void main(String[] args) {
Test2 test = new Test2();
test.startThread();
}
}
最佳答案
是的,保证在startThread
中启动的线程会看到nonFinalField
的值,因为启动线程会在父线程(调用main的线程)和子线程(在startThread
中启动的线程)之间建立“先发生”关系)。
这在17.4.4的衣物规格中列出(第三个项目符号)。