假设我有两个线程使用相同类的实例,它充当监视器。例如,Thread1和Thread2使用类ABC'o'的相同实例。
现在ABC类中有同步方法doProcess(),两个线程都在调用它。我在doProcess()中有一些条件,因为第一个线程处于wait()状态。现在当第二个线程进入doProcess()时,有条件告诉它终止整个处理。
一种解决方案是通知第一个线程并更新一些标志,告诉它不要再次阻塞并完成。
我在想什么,我可以从我的监视器对象'o'(就像notify和notifyAll)发送任何信号给所有等待线程中断和终止吗?
EDITED First Solution:
sync doProcess()
{
while( you are thread1 and !flag )
{
wait(); //line 3
}
if( you are thread2)
{
flag = true;
notifyAll(); //can i send send any interrupt signal to terminate all threads in line 3 itself;
}
}
答案 0 :(得分:0)
是。方法是.interrupt() 这将在接收线程中抛出和InterruptedException,这应该在run()方法中处理。 您仍然需要在正在运行的线程上设置标志,因为如果线程没有阻塞,则不会发生InterruptedException。