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