简单来说。如何在 JDK 1.6 或 1.7 中停止然后处理线程?Javadoc 说 stop() 已被弃用。停止/结束然后处理线程的正确方法是什么?
user2964580
问问题
173 次
3 回答
1
您不能停止/终止 Java 中的线程。您实际上可以做的是定期检查某些条件,然后从run()
方法返回,这意味着完成线程。一些阻塞调用(例如)通过在另一个线程用方法中断它时Thread.sleep()
抛出来支持中断。InterruptedException
threadToBeInterrupted.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 回答