小编Mr.*_*ndy的帖子

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

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

更新; 我想要做什么......

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

在Consumer.java里面:

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

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

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

有关此设计,请参阅新问题.

java concurrency multithreading loops message-passing

26
推荐指数
4
解决办法
4万
查看次数

Java:高性能消息传递(单一生产者/单一消费者)

我最初在这里问过这个问题,但我意识到我的问题不是关于一个真正的循环.我想知道的是,在Java中进行高性能异步消息传递的正确方法是什么?

我想做什么......

我有大约10,000名消费者,每个消费者都从他们的私人队列中消费消息.我有一个线程一个接一个地生成消息并将它们放在正确的消费者队列中.每个消费者无限循环,检查消息是否出现在队列中并进行处理.

我认为这个术语是"单一生产者/单一消费者",因为有一个生产者,每个消费者只能在他们的私人队列上工作(多个消费者从不从同一个队列中读取).

在Consumer.java里面:

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

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

注意:while (true) { ... }由Producer作为最后一条消息发送的KILL消息终止.

但是,我的问题是关于设计此消息传递的正确方法.我应该为messageQueue使用什么样的队列?应该是同步还是异步?如何设计消息?我应该使用while-true循环吗?消费者应该是一个线程,还是其他什么?10,000个线程会慢慢爬行吗?什么是线程的替代品?

那么,在Java中进行高性能消息传递的正确方法是什么?

java asynchronous message-passing producer-consumer

6
推荐指数
1
解决办法
6335
查看次数