在JDK 1.6+中处置线程

时间:2013-11-07 12:01:08

标签: java

简单。如何在JDK 1.6或1.7中停止然后处置线程? Javadoc说不推荐使用stop()。什么是停止/结束然后处置线程的正确方法?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

你不能在Java中停止/杀死一个线程。您实际可以做的是定期检查某些条件,然后从run()方法返回,这意味着完成线程。一些阻止调用(例如Thread.sleep())支持中断,只要另一个线程使用InterruptedException方法中断它,就会抛出threadToBeInterrupted.interrupt()

您可以通过实例方法Thread.currentThread().isInterrupted()或静态方法Thread.interrupted()定期检查中断状态(如果没有阻塞调用)。后者清除了中断状态。

答案 2 :(得分:0)

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

  • 中断线程
  • 使用将在每次循环迭代中测试的一些boolean表达式
  • 使用毒药对象。

您可以使用boolean表示该主题应该完成如下:

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

public void stopThread() {
  stopThread = true;
}