gpt4 book ai didi

Java/PriorityQueue 和线程

转载 作者:行者123 更新时间:2023-12-01 05:04:22 25 4
gpt4 key购买 nike

在我的应用程序中,我有 4 个线程将元素添加到 PriorityBlockingQueue 中,还有一个线程从中轮询元素。对于轮询线程来说,队列似乎无法访问。我想我必须采取措施使其线程安全。

在获取第一个元素后,我清除队列,它应该由其他 4 个填充线程再次填充。

轮询和填充线程位于保存 PriorityBlockingQueue 的同一个类中。

这是轮询代码:

private class UPPainter implements Runnable {
@Override
public void run() {
while(queue.size() > 0) {
ReceivedMsg msg = queue.poll();
queue.clear();
for(final IPacketListener c : listeners) {
new Thread(new ListenerUp(c, msg)).start();
}
}
}
}

最佳答案

当你的消费者线程启动时,队列可能是空的,因此 size = 0 并且 run() 将退出。您实际上必须等待输入消息。另外清理队列对我来说似乎没有意义?如果您想“关闭”消费者线程,请发送特殊的队列结束消息。使用queue.take()来实际阻塞,直到插入一个元素:

private class UPPainter implements Runnable {  
@Override
public void run() {
while(true) {
ReceivedMsg msg = queue.take();
for(final IPacketListener c : listeners) {
new Thread(new ListenerUp(c, msg)).start();
}
}
}
}

关于Java/PriorityQueue 和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12931377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com