Java: Is 'while (true) { ... }' 线程中的循环坏了?还有什么替代方案?

线程中的循环是否不好?还有什么替代方案?while (true) { ... }

更新;我想要的...

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

消费者内部.java:

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

创建者正在以快速的速度(每秒数百万条消息)将消息放入使用者消息队列中。消费者应该尽快处理这些信息!

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

请参阅有关此设计的新问题


答案 1

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

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

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


答案 2
while (!stop_running) { ... }

...也许?某种退出标志通常用于控制线程运行。


推荐