-1

質問があります。デーモンとして起動する Java プログラムを作成します。そのため、Daemon と Runnable を実装するクラスがあります。いくつinit()かのチェックを行ってから、チェックに問題がなければ、新しいスレッドを開始します。

thread = new Thread(this);

チェックがうまくいかない場合は、 を呼び出しますstop()。停止すると、次のように呼び出します。

thread.join();

しかし、新しいスレッドを作成したことがない場合、これはどのように機能するでしょうか。私はNullPointerException. この問題をどのように処理すればよいですか? キャッチNullPointerExceptionthread.join()スレッドが null でない場合にのみ呼び出しますか? 電話しないthread.join()?最善の方法とその理由は何ですか? ありがとうございました :-)

私がこの質問をした理由は、以前にデーモンを実装したことがなく、そこでスレッドを処理する方法がわからなかったためです。多分私は尋ねるべきではなかった。とにかくありがとう。

4

2 に答える 2

2

apacheのインターフェイスデーモンを拡張する場合、init()メソッドが失敗すると、DeamonInitExceptionをスローする必要があります。スレッドでこの開始を行うと呼び出されることはなく、デーモンは実行を中止します。

于 2012-05-25T14:33:55.257 に答える
2

これは Java 101 の回答に少し似ているため、質問を理解しているかどうかわかりません。

init()メソッドでは、新しいスレッドを開始してフィールドを設定する場合としない場合がありますthreadstop()メソッドでは、threadフィールドが null の場合とそうでない場合があります。null でない場合join()にのみそのスレッドを使用する場合は、次のコードを使用します。

   if (thread != null) {
      thread.join();
   }

捕獲NullPointerExceptionは避けるべきです。例外の作成は、実際にはかなりコストのかかるプロセスです。特に、スタック フレームのスナップショットを作成する場合は特にそうです。これは、「Effective Java」の本を引用して、例外は非例外よりも最大 70 倍遅いという良い議論です。

例外の費用

多くの人が例外を使用してステータス情報を呼び出し元に返しますが、これは IMO の悪いパターンです。例外は「例外的な」条件のためのものであり、エラー コードや返されたオブジェクトの代わりにはなりません。

質問が理解できない場合は、投稿を編集してください。回答を調整します。

于 2012-05-25T14:19:30.710 に答える