我想这与事前发生规则有关,但是我没有具体的解释...
我的问题是,是否保证线程“ 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的衣物规格中列出(第三个项目符号)。

09-27 00:05