スレッドは、ブロック操作であるリソースを開きます。成功した場合、スレッドは再びスレッドを閉じる必要があります。これは再びブロックされますが、常に有限時間で成功します。
hasResource
スレッドが中断されたくないことを示すために、他のスレッドと同期できないフラグ ( と呼びましょう) を使用することができます。他の同期はまったく許可されません。
このシナリオを処理するための安全な方法は次のとおりですか?
@Override // we're subclassing Thread
public void run () {
try {
while (!interrupted ()) {
blockingOpen ();
// glitch possibility in this line
hasResource = true;
blockingClose ();
hasResource = false;
}
}
catch (final InterruptedException e) {
interrupt ();
}
}
特に、これにより、スレッドがリソースを持っている間にスレッドが中断されないことが保証されますか?
私が知る限り、エラーが発生する可能性があるウィンドウは 1 つだけです。それは、Open の直後で、フラグを設定する前です。ただし、これはリソースのリークにはつながらないようですが、割り込み要求を誤って無視することにはなりません。それを防ぐことは可能ですか?