Java 在JDK 1.6+中处理线程;
简单地说。如何在JDK1.6或1.7中停止并处理线程?Javadoc say stop()已被弃用。停止/结束线程,然后处置线程的正确方法是什么?Java 在JDK 1.6+中处理线程;,java,Java,简单地说。如何在JDK1.6或1.7中停止并处理线程?Javadoc say stop()已被弃用。停止/结束线程,然后处置线程的正确方法是什么? 调用thread.interrupt()-这应该可以完成您正在寻找的任务您不能在Java中停止/杀死线程。实际上,您可以定期检查某些条件,然后从run()方法返回,这意味着完成线程。一些阻塞调用(例如)通过在另一个线程使用方法中断时抛出来支持中断 您可以通过实例方法或静态方法定期检查中断状态(在没有阻塞调用的情况下)。后者清除中断状态。有几种方法可
调用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()
)来测试它是否是有毒对象。如果它是一个有毒的对象,你就可以跳出线程循环。因此,要停止线程,只需向队列中添加一个中毒元素。