启动了几个工作线程,需要通知他们停止。由于某些线程在下一轮工作之前会 hibernate 一段时间,因此需要一种即使在 hibernate 时也能通知它们的方法。
如果是 Windows 编程,我可以使用事件和等待函数。在 Java 中,我通过使用计数为 1 的 CountDownLatch 对象来执行此操作。它可以工作但感觉不优雅,尤其是我必须检查计数值以查看是否需要退出:
run(){
while(countDownLatch.count()>0){
//working
// ...
countDownLatch.wait(60,TimeUnit.SECONDS);
}
}
Semaphore是另一种选择,但也感觉不太对。我想知道有没有更好的方法来做到这一点?谢谢。
最佳答案
最好的方法是 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();
只要您有对 t
的引用,“停止”t
所需要做的就是调用 t.interrupt()
.
关于java - 更好的方法来通知其他线程停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6859681/