Из JavaDocs:
- ConcurrentLinkedQueue является подходящим выбором , когда много потоков будет общий доступ к общей коллекции. Эта очередь не допускает пустых элементов.
- ArrayBlockingQueue - это классический «ограниченный буфер», в котором массив фиксированного размера содержит элементы, вставленные производителями и извлеченные потребителями. Этот класс поддерживает необязательную политику справедливости для упорядочивания ожидающих потоков производителей и потребителей.
- LinkedBlockingQueue обычно имеет более высокую пропускную способность, чем очереди на основе массивов, но менее предсказуемую производительность в большинстве параллельных приложений.
У меня есть 2 сценария: один требует, чтобы очередь поддерживала множество производителей (потоков, использующих его) с одним потребителем, а другой - наоборот.
Я не понимаю, какую реализацию использовать. Может кто-нибудь объяснить, в чем разница?
Кроме того, что такое «необязательная политика справедливости» в ArrayBlockingQueue
?