2016-05-12 2 views
2

私は計算を開始し、ユーザCancelで終了したかったのです。 Thead.stop()を呼び出すとすべてのモニタがロック解除され、ThreadDeath例外が発生するとします。これは、まだfinallyが呼び出されていることを意味します。ThreadDeathのスレッドライフサイクル

私はロックを気にしないが、今まで割り当てられたリソースを解放したいとします。私はスレッドが割り振りを解放し終えるまで、キャンセラーに知っておく/待ちます。 finallyセクションにfinallyセクションに無限ループがあるとします。 thread.joinはそのスレッドに成功しますか?

+4

ただしないでください。 –

答えて

1

ThreadDeathがスローされるポイントでスレッドが実行しているコードによって異なります。たとえば、スレッドがfinallyブロックの先頭に到達したようにスレッドが停止した場合、ブロックが入力された後、リソースが閉じられる前にThreadDeathがスローされ、最終的にブロックされない状況が発生する可能性があります完了しました。

中断を使用するとエラーが発生しにくくなります。中断されているスレッドは、スレッドが完了してリソースを閉じるのを完全に制御できます。

+0

AFAIKでは、熱で計算を行うスレッドではなく、待機スレッドだけを中断できます。 –

+0

@LittleAlien:はい、中断されているスレッドは、中断されたフラグを確認するか、スリープまたは待機する必要があります。 –

+0

@リトルエイリアン:明確にするために、私はちょうどあなたがすべての場合に完全な確実性を持っていない可能性があるこのエッジケースが存在すると言っています。 –

関連する問題