Java:线程中的 `while (true) { ... }` 循环不好吗?有什么选择?

标签 java multithreading concurrency loops message-passing

线程中的 while (true) { ... } 循环是否不好?有什么办法?

更新;我想要...

我有大约 10,000 个线程,每个线程都使用来自其私有(private)队列的消息。我有一个线程一一生成消息并将它们放入正确的消费者队列中。每个消费者线程无限循环,检查是否有消息出现在他们的队列中并处理它。

Consumer.java 内部:

@Override
public void run() {
    while (true) {
        Message msg = messageQueue.poll();
        if (msg != null) {
            ... // do something with the message
        }
    }
}

生产者正在快速将消息放入消费者消息队列中(每秒数百万条消息)。消费者应尽快处理这些消息!

注意:while (true) { ... } 由 Producer 作为其最后一条消息发送的 KILL 消息终止。但是,我的问题是关于进行此消息传递的正确方法...

请看the new question , 关于这个设计。

最佳答案

您可以选择检查中断状态,而不是永远循环并中断或返回。

while (!Thread.currentThread().isInterrupted()) {
    try {
        doWork();
        wait(1000);
    } catch (InterruptedException ex) {
        Thread.currentThread().interrupt();
    }
}

如果您的线程是由 ExecutorService 管理的任务,您可以通过调用 shutdownNow() 让它们全部正常结束。

关于Java:线程中的 `while (true) { ... }` 循环不好吗?有什么选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3367192/

相关文章:

java - 如何在 Java5 中的 ThreadPoolExecutor 中对核心线程应用超时

c - 使用多线程的套接字服务器或文件服务器实现 : concept not clear

java - 避免 boolean 翻转的同步块(synchronized block)

C 并发程序输出取决于输出到标准输出还是文件

concurrency - 并发编程作用于数组中的每个元素

java - 错误信息 : stream closed

java - volatile 关键字也适用于非基元

java - Jython 能取代 Java 吗?

java - 当表单中存在多个具有相同类型的参数时,全局绑定(bind)初始值设定项会出现问题

c++ - 如何处理来自 Qt 中另一个线程的信号泛滥