[英]Starting a thread in the constructor
在Brian Goetz關於安全施工技術的文章中,您可以閱讀:
[...]通常,當對象擁有線程時, 該線程是內部類,或者我們將此引用傳遞給其構造函數 (或該類本身擴展了Thread類)。 如果對象要擁有線程,則最好像Thread一樣,提供一個start()方法,並從start()方法而不是構造函數中啟動線程。 盡管這確實通過接口公開了該類的一些實現細節(例如可能擁有一個擁有的線程),但這通常是不希望的,但在這種情況下,從構造函數啟動線程的風險大於實現隱藏的好處。
我想使用以下代碼應該不會有任何問題。 由於它不是一個內部類,也沒有我傳遞的參考this
。 但我想確定。
private Controller controller;
private View view;
public Facade() {
view = new View();
controller = new Controller(view);
controller.start();
}
但是我一直收到NetBeans警告。因此,此代碼安全還是不安全?
不在構造函數中啟動線程的主要原因-在創建“ this”之前(執行構造函數之后)不要公開“ this”。 在您的代碼中,我看不到這樣的代碼:
new Thread(this);
所以應該沒問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.