启动了几个工作线程,需要通知他们停止.由于某些线程在下一轮工作之前会休眠一段时间,因此需要一种即使在睡觉时也能通知它们的方法.
如果是Windows编程,我可以使用Event和wait函数.在Java中我通过使用CountDownLatch对象来做到这一点,该对象的计数为1.它工作但感觉不优雅,特别是我必须检查计数值以查看是否需要退出:
run(){
while(countDownLatch.count()>0){
//working
// ...
countDownLatch.wait(60,TimeUnit.SECONDS);
}
}
Run Code Online (Sandbox Code Playgroud)
信号量是另一种选择,但也感觉不对.我想知道有没有更好的方法呢?谢谢.
最好的方法是interrupt()工作线程.
Thread t = new Thread(new Runnable(){
@Override
public void run(){
while(!Thread.currentThread().isInterrupted()){
//do stuff
try{
Thread.sleep(TIME_TO_SLEEP);
}catch(InterruptedException e){
Thread.currentThread().interrupt(); //propagate interrupt
}
}
}
});
t.start();
Run Code Online (Sandbox Code Playgroud)
只要你有一个参考t,"停止"所需的t就是调用t.interrupt().