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