はい、あなたはへの必要性は、あなたが投げるか、処理しなければならないのいずれか、他の確認済みの例外のために心配する必要はあり同じように、およそInterruptedException
心配します。
ほとんどの場合、InterruptedException
は、停止要求を示しています。ほとんどの場合、コードを実行していたスレッドがinterruptedであったためです。
接続プールが接続を待っている特定の状況では、これはキャンセルの問題であり、取得を中止して中断したフラグを復元する必要があります(下記参照)。一例として、
あなたはExecutor
内で実行されているRunnable
/Callable
のいくつかの並べ替えを使用している場合、あなたは正しく例外:InterruptedExceptionを処理する必要があります。
executor.execute(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
continue; //blah
}
pingRemoteServer();
}
}
});
これは、あなたのタスクは従うことがないことを意味しますエグゼキュータによって使用される割り込みメカニズムであり、適切なキャンセル/シャットダウンを許可しません。
代わりに、適切なイディオムが中断状態を復元してから、実行を停止することです:
executor.execute(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // restore interrupted status
break;
}
pingRemoteServer();
}
}
});
便利なリソース:
もちろんです。詳細については、Java専門家のニュースレターhttp://www.javaspecialists.co.za/archive/Issue056.html –
Thread.currentThread()。Thread.interrupted()ではなくinterrupt()にする必要はありませんか? javadocsによると、Thread.interrupted()は割り込みフラグをクリアし、設定しません。 –
@Joe:そうです、私は例を修正しました。ありがとうございました。 –