1

リソース待機スレッドを中断/再開して他の作業に戻すにはどうすればよいですか?たとえば、私のスレッドは、リソースがハングしたか、応答状態にないリソースからの応答を待機しています。そのスレッドを再開して他の作業を行うにはどうすればよいですか?

他のスレッドが待機中のスレッドに例外を送信して、例外を除いて他の作業に戻ることができるようにすることはできますか?

アップデート :

私は次のように試しましたが、役に立たないです。

タイムアウトスレッドがあります。これは、最初のスレッドが待機する特定のトランザクションにデフォルトのタイムアウトが発生したかどうかを確認し、発生した場合は、最初のスレッドでinterrupt()呼び出しを起動します。

4

2 に答える 2

3

答えは多くの要因に依存します。スレッドを中断する「正しい」方法は、thread.interrupt()メソッドを使用することです。これには、スレッドのコードが協調的である必要があります。割り込み可能な操作(待機やスリープなど)によってスローされたInterruptedExceptionを処理するか、現在のスレッドの割り込みフラグを定期的にチェックすることにより、割り込みを認識している必要があります。

次に、コードは、中断がどのような結果をもたらすかを決定する必要があります。通常、中断が発生した場合にスレッドを正常に終了する必要があります。

割り込みを使用する代わりに、ブロック操作にタイムアウトメカニズムが組み込まれているかどうかを確認します。たとえば、obj.wait()でブロックされている場合は、代わりにobj.wait(timeout)を使用できます。

于 2013-02-13T12:29:29.713 に答える
0

はい、スレッドを中断できます。Thread.interrupt メカニズムを使用して、ググってください。

于 2013-02-13T12:18:45.003 に答える