2012-06-08 60 views
1

Brian Goetz's article about safe construction techniques你能讀:開始在構造一個線程

[...]通常,當一個對象擁有一個線程,要麼線程是一個內部類,或者我們通過這個參考其構造函數(或者類本身擴展了Thread類)。如果一個對象要擁有一個線程,最好是對象提供一個start()方法,就像Thread一樣,並且從start()方法而不是從構造方法啓動線程。雖然這確實通過接口暴露了類的一些實現細節(例如可能存在一個擁有的線程),但這往往是不可取的,在這種情況下,從構造函數啓動線程的風險超過了實現隱藏的好處。

我想用下面的代碼應該沒有任何問題。由於它不是內部類,所以我通過了this的參考。但我想確定。

private Controller controller; 
private View view; 

public Facade() { 
    view = new View(); 
    controller = new Controller(view); 
    controller.start(); 
} 

雖然我不斷收到NetBeans警告......那麼這段代碼是安全還是不安全?

+1

而你的問題是? – Robert

+0

和你的問題是什麼? – CAA

+0

@Robert ok;)「那麼這段代碼安全還是不安全?」 – eversor

回答

0

主要原因不要在構造函數中啓動線程 - 在創建「this」之前不要暴露「this」(在構造函數執行後)。在你的代碼中,我看不到這樣的代碼:

new Thread(this); 

所以它應該沒問題。