2011-02-08 3 views
3

私はInterruptedExceptionについて読んできましたが、すべてのケースで正しく処理するための銀色の弾丸の解決策はないことはすぐに明らかです。Thread.sleep()によってスローされたInterruptedExceptionの不適切な処理を実証するための良いサンプルプログラムは何ですか?

まだ見ていないものは、例外が不適切に処理された場合に何が問題になるかを示すサンプルコードです。もちろん、私はいくつかの効果(糸飢餓など、私がそれらの一つだと思う)が実証するのは難しいことを認識しています。 Thread.sleep()を正しく使用していることを示すことに限定しています。

これについて幾分現実的なサンプルプログラムを設計するにはどうしたらいいですか?ここで

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

  1. 減少した応答性を実証するためのシンプルなGUIアプリケーションを作成します。 UIスレッドと、いくつかのブロッキングタスクを実行するための単純なスレッドプールがあります。スレッドプールマネージャは、実行中のスレッドの中断された状態をチェックしてそれらを管理します。飲み込まれたInterruptedExceptionはプールにスレッドがなくなるため、アプリケーションのレスポンスが低下します。

    これは、管理されているスレッドと管理されていないスレッドのどちらをスリープ状態にするかについて、異なる処理方法を指摘するのに役立ちます。

  2. ガーベッジとスリープを作成するスレッドがたくさんある。中断されたときに中断された状態を復元するものと、中断されない状態を復元するもの(例外を取り除く)の2種類のスレッドがあります。デモでは、メモリをほとんど必要としないJVMでアプリケーションを実行し、例外を飲み込んだりガベージコレクションを禁止したり、オーバヘッドを増加させたりすることができます(呼び出し間の間隔が長いため)。

これらの考えは意味がありますか?他の(もっと単純な)アイディアですか?

答えて

4

スレッドを中断してシャットダウンできるスレッドがあるとします。

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

割り込みを破棄することで、アプリケーションを再起動しなくても修正できないリソースリークを引き起こすことがあります。

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

関連する問題