1

安全な建設技術に関する Brian Goetz の記事では、次のように読むことができます。

[...] 多くの場合、オブジェクトがスレッドを所有している場合、そのスレッドが内部クラスであるか、 this 参照をそのコンストラクターに渡します(またはクラス自体が Thread クラスを拡張します)。オブジェクトがスレッドを所有する場合、Thread と同様にオブジェクトが start() メソッドを提供し、コンストラクターからではなく start() メソッドからスレッドを開始するのが最善です。これにより、インターフェイスを介してクラスの実装の詳細 (所有スレッドが存在する可能性など) が明らかになりますが、これは多くの場合望ましくありません。

以下のコードで問題ないと思います。内部クラスでもないので、 の参照を渡していますthis。しかし、私は確信したい。

private Controller controller;
private View view;

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

しかし、NetBeans の警告が何度も表示されます... では、このコードは安全ですか、それとも安全ではないのでしょうか?

4

1 に答える 1

0

コンストラクターでスレッドを開始しない主な理由は、"this" が作成される前 (コンストラクターの実行後) に "this" を公開しないことです。あなたのコードには、次のようなコードはありません。

new Thread(this);

それでいいはずです。

于 2012-06-08T08:46:23.643 に答える