如何杀死正在等待同步资源的线程?

时间:2015-11-22 16:53:44

标签: java multithreading concurrency synchronization

假设名为Prey的类扩展Thread,并且名为Prey的{​​{1}}对象在deer资源上处于等待状态。现在我想通过处于等待状态的力来杀死这个synchronized。以下哪一种方法可以杀死deer

  1. deer
  2. deer.interrupt();
  3. deer.notify(); deer.interrupt();
  4. deer.notify(); deer.killmeBoolean(true);
  5. 其中deer.killmeBoolean(true); deer.notify();用于设置标志,以便可以killmeBoolean(boolean)循环终止deer线程。

1 个答案:

答案 0 :(得分:4)

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

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

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