3

私は InterruptedException について読み回してきましたが、すべての場合に適切に処理するための特効薬の解決策がないことはすぐに明らかです。

私がまだ見ていないのは、例外が不適切に処理された場合に何が問題になるかを示すサンプル コードです。もちろん、一部の影響 (スレッドの枯渇など) は実証するのが難しいことは理解しています。の適切な使用方法を示すことに限定したいと思いますThread.sleep()

このためのやや現実的なサンプル プログラムをどのように設計しますか?

これまでの私のアイデアは次のとおりです。

  1. 応答性の低下を示す簡単な GUI アプリケーションを作成します。UI スレッドと、いくつかのブロッキング タスクを実行するための単純なスレッド プールがあります。スレッド プール マネージャーは、実行中のスレッドの中断状態をチェックして管理します。swallowedInterruptedExceptionによってプールのスレッドが不足するため、アプリケーションの応答が遅くなります。

    これは、マネージ スレッドとアンマネージ スレッドでスリープする場合のさまざまな処理戦略を指摘するのに役立ちます。

  2. ガベージとスリープを作成するスレッドがたくさんあります。スレッドには、中断されたときに中断された状態を復元するスレッドと、そうでない (例外を飲み込む) スレッドの 2 種類があります。次に、メモリの少ない JVM でアプリケーションを実行し、(できれば) 例外を飲み込むとガベージ コレクションが抑制されるか、オーバーヘッドが増加することを示します (呼び出し間の間隔が長いため)。

これらのアイデアは理にかなっていますか?他の(おそらくもっと簡単な)アイデアはありますか?

4

1 に答える 1

4

中断してシャットダウンできるようにしたいスレッドがあるとします。

public void run() {
   while(!Thread.currentThread().interrupted()) {
       doWork();     
       callMethodWhichIgnoresInterrupted();
   }
}

割り込みを破棄することで、アプリケーションを再起動しないと修正できないリソース リークを引き起こすことがあるスレッドの終了に失敗することがあります。

例外を無視することは、95% 以上の確率で非常に悪い考えです。これが、Java で例外がチェックされる理由です。これらの問題は、割り込みに限定されません。

于 2011-02-08T08:55:35.823 に答える