Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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 在JDK 1.6+中处理线程;_Java - Fatal编程技术网

Java 在JDK 1.6+中处理线程;

Java 在JDK 1.6+中处理线程;,java,Java,简单地说。如何在JDK1.6或1.7中停止并处理线程?Javadoc say stop()已被弃用。停止/结束线程,然后处置线程的正确方法是什么? 调用thread.interrupt()-这应该可以完成您正在寻找的任务您不能在Java中停止/杀死线程。实际上,您可以定期检查某些条件,然后从run()方法返回,这意味着完成线程。一些阻塞调用(例如)通过在另一个线程使用方法中断时抛出来支持中断 您可以通过实例方法或静态方法定期检查中断状态(在没有阻塞调用的情况下)。后者清除中断状态。有几种方法可

简单地说。如何在JDK1.6或1.7中停止并处理线程?Javadoc say stop()已被弃用。停止/结束线程,然后处置线程的正确方法是什么?


调用thread.interrupt()-这应该可以完成您正在寻找的任务

您不能在Java中停止/杀死线程。实际上,您可以定期检查某些条件,然后从
run()
方法返回,这意味着完成线程。一些阻塞调用(例如)通过在另一个线程使用方法中断时抛出来支持中断


您可以通过实例方法或静态方法定期检查中断状态(在没有阻塞调用的情况下)。后者清除中断状态。

有几种方法可以做到这一点。我假设在
run()
方法中有某种循环。要离开/退出线程,只需中断循环即可。现在的问题是:如何打破这种循环?有几种方法,例如:

  • 中断线程
  • 使用一些将在每次循环迭代中测试的
    布尔表达式
  • 使用有毒物品
您可以使用
布尔值
指示线程应该像以下那样结束:

volatile boolean stopThread;
...
void run() {
...
  while(!Thread.currentThread.isInterrupted() && !stopThread) {
    // do some stuff
  }
}

public void stopThread() {
  stopThread = true;
}

看到这个甲骨文还有一件事,你不能处置线程。在您停止线程之后,GC将处理这个问题(因为正在运行的线程永远不会是GCd)。。。。或者调用一些可中断操作并正确支持中断。谢谢。不能+1-不够,谢谢!不能+1-没有足够的重复谢谢-不能再+1-6次重复。但是,什么是有毒物品?@ MaueelB认为你在线程中的队列中处理元素。将元素从队列中取出后,调用一些方法(例如:
myQueueItem.ispoised()
)来测试它是否是有毒对象。如果它是一个有毒的对象,你就可以跳出线程循环。因此,要停止线程,只需向队列中添加一个中毒元素。