更好的方式来发信号通知其他线程停止?

Hou*_*mor 9 java

启动了几个工作线程,需要通知他们停止.由于某些线程在下一轮工作之前会休眠一段时间,因此需要一种即使在睡觉时也能通知它们的方法.

如果是Windows编程,我可以使用Event和wait函数.在Java中我通过使用CountDownLatch对象来做到这一点,该对象的计数为1.它工作但感觉不优雅,特别是我必须检查计数值以查看是否需要退出:

run(){
    while(countDownLatch.count()>0){
            //working
            // ...
            countDownLatch.wait(60,TimeUnit.SECONDS);
    }
}
Run Code Online (Sandbox Code Playgroud)

信号量是另一种选择,但也感觉不对.我想知道有没有更好的方法呢?谢谢.

Moo*_*eam 8

最好的方法是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().

  • 我喜欢你提到的事实,因为中断的标志被清除后再次中断. (4认同)