Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

ConcurrentLinkedQueue

Потокобезопасная очередь без блокировок.

Доступно с: Java 1.5

Синтаксис

public class ConcurrentLinkedQueue<E> implements Queue<E>

Примеры

Очередь, которую наполняют несколько потоков:

void main() {
    var queue = new ConcurrentLinkedQueue<String>();
    try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
        for (int i = 0; i < 50; i++) {
            int n = i;
            executor.submit(() -> queue.offer("event-" + n));
        }
    }
    IO.println(queue.size());
    IO.println(queue.contains("event-49"));
}

Результат:

50
true

Примечания

poll() на пустой очереди возвращает null, не дожидаясь элементов. Если потребитель должен ждать новых элементов, используйте BlockingQueue (LinkedBlockingQueue, ArrayBlockingQueue) с методами put() и take(). Для списков, которые часто читают и редко меняют, есть CopyOnWriteArrayList.

См. также

  • ConcurrentHashMap — Потокобезопасный словарь для одновременной работы из многих потоков.
  • Queue — Очередь: элементы добавляются в конец и забираются из начала.
  • ArrayDeque — Быстрая двусторонняя очередь на массиве — замена `Stack` и `LinkedList`.

В учебнике

  • Потокобезопасные коллекции — Коллекции для многопоточного кода в Java — ConcurrentHashMap и merge, CopyOnWriteArrayList, BlockingQueue и схема производитель — потребитель.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.