Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何杀死正在等待同步资源的线程?_Java_Multithreading_Concurrency_Synchronization - Fatal编程技术网

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可能会因比赛条件而导致错误。