假设一个名为Prey的类扩展了Thread,并且一个名为Preydeer的对象在synchronized资源上处于等待状态。现在,我想用武力杀死处于等待状态的deer。以下哪种方法是杀死deer的正确方法。

  • deer.interrupt();
  • deer.notify(); deer.interrupt();
  • deer.notify(); deer.killmeBoolean(true);
  • deer.killmeBoolean(true); deer.notify();

  • 其中killmeBoolean(boolean)用于设置标志,以便可以从deer循环终止while(flag)线程。

    最佳答案

    您可以在线程正在等待的资源上调用notifynotifyAll。这将告诉线程资源已“就绪”并继续其工作。请注意,仅在释放资源锁定时,线程仍然可以继续。

    ,您调用deer.interrupt()告诉线程停止其正在执行的操作。这将通过抛出InterruptedException来取消等待操作。通常期望线程随后将尽快清理并停止,但是,由线程的实现(即,在这种情况下为您自己的代码)来处理中断。

    设置killMeBoolean仅在线程运行并检查相应的变量时才有效。为此,您可以使用上面的任何一种方法。

    10-08 16:38