在java Runnable中,我经常写一个循环,比如
while(running) {
......
}
然后将运行设置为false
可以使线程停止。
但是如果runnable是一个没有任何循环的漫长过程,并且不能被任何标签控制。
如何让线程在另一个线程中停止?
由于
答案 0 :(得分:6)
长进程可能会接受Thread.interrupt(),所以先尝试一下。 (虽然不太可能)
作为最后的手段,您可以使用Thread.stop(),但是您应该阅读此方法的警告。
停止线程的唯一安全方法是将其置于单独的进程中并终止进程以阻止它。
答案 1 :(得分:0)
据我所知,有几种方法。
Thread t = new Thread();
t.interrupt();
t.stop();
t.destroy();
我不会为后面的2提供建议,因为如果他们从同步对象中获取锁定等,它们可能会导致问题。
编辑:错字
答案 2 :(得分:0)
使用
yourThread.sleep(interval);
或
yourThread.stop();
答案 3 :(得分:0)
长时间运行的进程通常会有一些循环。我无法想象一个没有编码的长时间运行算法。
因此,即使您没有经典的外部while
循环,您仍然可以将running
的检查添加到算法的内部循环中。
(例外:阻止I / O,基于套接字的任务。但这是一个不同的故事 - 即使您从流中读取,也至少有一个循环可以添加停止检查)
答案 4 :(得分:0)
我不推荐使用stop()
,因为它已被弃用,甚至可能不适用于未来的JVM。
最安全的方法是使用interrupt()
停止线程并让线程自己检查isInterrupted()
- 这将需要插入一些检查,不幸的是。
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#interrupt()
答案 5 :(得分:0)
通常情况下,你不能这样做。线程只会自行停止,所有其他选项都是危险的/ hacky /不可移植的。如果你的线程在主循环中,你发送一个信号,线程shoudl反应并自行停止(在Java中它是通过中断机制完成的。)
如果您的线程不是这样的 - 请考虑这是一个应该尽快修复的错误。