基本上以下的作品,但自從我讀了關於最後的關鍵字我不知道了,如果我不得不聲明名稱最終如果不同的線程訪問它?從內部類的線程訪問外部字段(非最終)是否是線程安全的?
在此先感謝。
public class Test4 {
// to ensure thread-safety do we have to declare the variable name final ?
private String name;
public Test4 (String name) {
this.name = name;
}
public void start() {
new MyThread().start();
}
private class MyThread extends Thread {
public void run() {
System.out.println(name);
}
}
public static void main(String[] args) {
Test4 t = new Test4("Don't know if I am threadsafe");
t.start();
}
}
這將永遠打印「不知道我是否是線程安全的」,無論最終如何。在構造對象之前,new()不會返回;這將在新線程啓動之前發生。 – tucuxi
@pst在進一步寫入'name'的情況下,是的,有差異。但是,如果寫'唯一時間'是在施工期間,那麼'最終'是不需要的(儘管它確實使讀者更清楚)。 – tucuxi