簡體   English   中英

在構造函數中啟動線程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM