3

简单来说。如何在 JDK 1.6 或 1.7 中停止然后处理线程?Javadoc 说 stop() 已被弃用。停止/结束然后处理线程的正确方法是什么?

4

3 回答 3

1

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

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

于 2013-11-07T12:07:51.240 回答
1

http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#interrupt%28 %29

调用 thread.interrupt() - 这应该做你正在寻找的

于 2013-11-07T12:07:06.693 回答
0

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

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

您可以使用 aboolean来指示线程应该像这样完成:

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

public void stopThread() {
  stopThread = true;
}
于 2013-11-07T12:14:20.240 回答