java - 更好的方法来通知其他线程停止?

标签 java

启动了几个工作线程,需要通知他们停止。由于某些线程在下一轮工作之前会 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/

相关文章:

java - Android 在执行 HttpGet 请求时崩溃

java - Apache POI autoSizeColumn 将大小调整为最小宽度

java - 如何将 map 内容添加到Multimap?

java - JPA CascadeType.ALL 不能通过查询工作?

java - 将 json id 反序列化为对象列表

java - java声音放大器方法

java - Bean 验证组序列不起作用

带有 JPA + Hibernate(或类似)和 Apache Derby 嵌入式数据库的 Java 独立应用程序

java - Java NIO 解码过程中如何去掉不正确的符号?

java - 词频循环