Java 如何杀死正在等待同步资源的线程?
假设名为Java 如何杀死正在等待同步资源的线程?,java,multithreading,concurrency,synchronization,Java,Multithreading,Concurrency,Synchronization,假设名为Prey的类扩展了Thread,名为deer的Prey对象在同步的资源上处于等待状态。现在我想用武力杀死这只处于等待状态的鹿。以下哪一项是杀死鹿的正确方法 deer.interrupt() deer.notify(); 鹿。中断() deer.notify(); deer.killmeBoolean(真) deer.killmeBoolean(真); deer.notify() 其中killmeBoolean(boolean)用于设置一个标志,以便deer线程可以从while(flag)
Prey
的类扩展了Thread
,名为deer
的Prey
对象在同步的资源上处于等待状态。现在我想用武力杀死这只处于等待状态的鹿。以下哪一项是杀死鹿的正确方法
deer.interrupt()代码>
deer.notify();
鹿。中断()代码>
deer.notify();
deer.killmeBoolean(真)代码>
deer.killmeBoolean(真);
deer.notify()代码>
其中killmeBoolean(boolean)
用于设置一个标志,以便deer
线程可以从while(flag)
循环中终止。您可以对线程正在等待的资源调用notify
或notifyAll
。这将告诉线程资源已“准备就绪”,并继续其工作。请注意,线程仍然只能在资源上的锁被释放时继续
或,调用deer.interrupt()
告诉线程停止它正在做的事情。这将通过抛出中断异常
来取消等待操作。通常预期线程会尽快清理并停止,但是,处理中断的时间取决于线程的实现(即,在本例中是您自己的代码)
设置killMeBoolean
仅在线程运行并检查相应变量时有效。为此,您可以使用上面的任一方法。您可以调用线程正在等待的资源上的notify
或notifyAll
。这将告诉线程资源已“准备就绪”,并继续其工作。请注意,线程仍然只能在资源上的锁被释放时继续
或,调用deer.interrupt()
告诉线程停止它正在做的事情。这将通过抛出中断异常
来取消等待操作。通常预期线程会尽快清理并停止,但是,处理中断的时间取决于线程的实现(即,在本例中是您自己的代码)
设置killMeBoolean
仅在线程运行并检查相应变量时有效。要做到这一点,您可以使用上面的任何一种方法。在我看来就像是家庭作业。这是1)如果您中断的代码编写正确。但这并不能保证:(或者阅读jcip.net的书)Thread.currentThread().isInterrupted()
通常为(减去通过InterruptedException停止时未设置中断标志的代码)与自定义布尔值一样好,所以您不需要。@VinodMadyalkar中断不会释放任何锁,除非线程实现了这一点。对我来说,这就像是家庭作业。如果您中断的代码编写正确,那就是1)。但这并不能保证:(或者阅读jcip.net的书)Thread.currentThread().isInterrupted()
通常为(减去通过InterruptedException停止时未设置中断标志的代码)与自定义布尔值一样好,所以您不需要。@VinodMadyalkar除非实现线程,否则中断不会释放任何锁。1或4是否正确取决于您的实现。如果1是正确的,那么2也应该起作用。3和4基本相同,但3可能会因比赛条件而导致错误。1或4是否正确取决于您的实现。如果1是正确的,那么2也应该起作用。3和4基本相同,但3可能会因比赛条件而导致错误。