gpt4 book ai didi

java - PriorityBlockingQueue 不阻塞?

转载 作者:行者123 更新时间:2023-12-01 07:37:41 25 4
gpt4 key购买 nike

我有一个PriorityBlockingQueue如下:

BlockingQueue<Robble> robbleListQueue = new PriorityBlockingQueue<Robble>();

Robble实现Comparable<Robble>而且我能够毫无问题地对列表进行排序,因此我知道我的比较有效。

我还有以下可运行的:

private class RobbleGeneratorRunnable implements Runnable {
private final BlockingQueue<Robble> robbleQueue;
public RobbleGeneratorRunnable(BlockingQueue<ResultList> robbleQueue) {
this.robbleQueue = robbleQueue;
}
@Override
public void run() {
try {
robbleQueue.put(generateRobble());
} catch (InterruptedException e) {
// ...
}
}

private Robble generateRobble() {
// ...
}
}

我将数千个这样的可运行程序放入 ExecutorService 中然后shutdown()awaitTermination() .

根据BlockingQueue JavaDoc,put(...)是一个阻挡 Action 。然而,当我迭代队列中的项目时,它们大部分都是按顺序排列的——有些项目是无序的,这表明队列没有正确阻塞。就像我之前说的,我可以对 Robble 进行排序很好。

可能导致的原因 robbleQueue.put(generateRobble())无法正确阻止?

最佳答案

根据 javadoc,

The Iterator provided in method iterator() is not guaranteed to traverse the elements of the priority queue in any particular order. If you need ordered traversal, consider using Arrays.sort(pq.toArray())

Add、peek、poll 和remove 需要按优先级顺序操作,但迭代器不需要。

关于java - PriorityBlockingQueue 不阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612953/

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