当我试图找出如何在具有多个线程的程序中停止线程时,
我suggested调用一个方法来实际设置一个标志,告诉该线程停止做实际工作,如下所示:
public class ThreadTobeTerminated implements Runnable {
private static final Logger LOGGER = LoggerFactory.getLogger(IndexProcessor.class);
private volatile boolean running = true;
public void terminate() {
running = false;
}
@Override
public void run() {
while (running) {
try {
LOGGER.debug("Doing some real work ,like Counting...");
for(int i=0;i<100;i++){}
} catch (InterruptedException e) {
LOGGER.error("Exception", e);
running = false;
}
}
}
}
当我想停止这一步时,我会打电话给threadInstance.terminate();
。
不要我真的要停止这个帖子吗?
为什么我应该让这个线程做一些无用的工作(调用方法run
,测试标志running==false
然后返回)?我的意思是:这是浪费时间,不是吗?
答案 0 :(得分:1)
当执行范围超出run()
方法时,线程停止,所以当while
循环被破坏时,线程将停止。
如果情况需要,这也可以让你做一些清理工作:
public void run() {
while (running) {
try {
LOGGER.debug("Doing some real work ,like Counting...");
for(int i=0;i<100;i++){}
} catch (InterruptedException e) {
LOGGER.error("Exception", e);
running = false;
}
}
//Clean up
}
上述方法允许您控制线程如何停止以及之后发生的事情,而不是可能只是杀死它,这可能会导致各种问题。