同じオブジェクトで同期したい2つのスレッドがあります。特定の条件が満たされた場合、TheadはスレッドA
を中断できる必要があります。B
これは、2つのスレッドが実行する/実行する必要があることの擬似コードです。
A:
public void run()
{
while(true)
{
//Do stuff
synchronized(shared)
{
//Do more stuff
if(condition)
{
B.interrupt();
}
}
}
}
B:
public void run()
{
while(true)
{
try
{
//Do stuff
synchronized(shared)
{
//Do more stuff
}
}
catch(InterruptedException e)
{
continue;
}
}
}
これが私が解決できない状況です:
- スレッド
A
は共有リソースを取得し、いくつかのことを行います。 - その間、スレッド
B
は同期ブロックに到達しA
、共有リソースを解放するのを待ちます。 - スレッド
A
は、作業中に、スレッドBが共有リソースを持つべきではないことに気づき、スレッドを中断しようとしB
ます。しかし、スレッドはすでにスローされる可能性B
のあるポイントを超えています。InterruptedException
私の質問は、スレッドが何かを待っている間にスレッドを中断する方法はありますsynchronized
か?