假设一个名为Prey
的类扩展了Thread
,并且一个名为Prey
的deer
的对象在synchronized
资源上处于等待状态。现在,我想用武力杀死处于等待状态的deer
。以下哪种方法是杀死deer
的正确方法。
deer.interrupt();
deer.notify(); deer.interrupt();
deer.notify(); deer.killmeBoolean(true);
deer.killmeBoolean(true); deer.notify();
其中
killmeBoolean(boolean)
用于设置标志,以便可以从deer
循环终止while(flag)
线程。 最佳答案
您可以在线程正在等待的资源上调用notify
或notifyAll
。这将告诉线程资源已“就绪”并继续其工作。请注意,仅在释放资源锁定时,线程仍然可以继续。
或,您调用deer.interrupt()
告诉线程停止其正在执行的操作。这将通过抛出InterruptedException
来取消等待操作。通常期望线程随后将尽快清理并停止,但是,由线程的实现(即,在这种情况下为您自己的代码)来处理中断。
设置killMeBoolean
仅在线程运行并检查相应的变量时才有效。为此,您可以使用上面的任何一种方法。