0
当我试图找出如何在多线程的程序停止一个线程,
我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
然后返回)?我的意思是:这是浪费时间,不是吗?
作为一种替代方法,您提出了什么建议?仍然允许线程以*受控*方式停止,而不是通过操作中途停止,使系统处于不太明确的状态? – 2015-04-01 13:56:25