У меня есть PriorityBlockingQueue
следующим образом:
BlockingQueue<Robble> robbleListQueue = new PriorityBlockingQueue<Robble>();
Robble
реализует Comparable<Robble>
, и я могу сортировать списки без проблем, поэтому я знаю, что мои сравнения работают.
У меня также есть следующий Runnable:
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() {
// ...
}
}
Я помещаю несколько тысяч этих runnable в ExecutorService
, а затем shutdown()
и awaitTermination()
.
Согласно BlockingQueue
JavaDoc, put(...)
является блокирующим действием.Однако, когда я перебираю элементы в очереди, они в основном только в порядке - есть некоторые, которые не в порядке, что указывает мне, что очередь не блокируется должным образом.Как я уже говорил ранее, я могу нормально отсортировать Robble
.
Что может быть причиной того, что robbleQueue.put(generateRobble())
не блокируется должным образом?