Mediumblocking-queue

Что такое BlockingQueue?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

BlockingQueue — интерфейс java.util.concurrent для producer-consumer. put(e) блокирует если очередь полна, take() блокирует если пуста; offer(e, timeout) и poll(timeout) — с timeout.

BlockingQueue<Task> q = new LinkedBlockingQueue<>();

// producer
q.put(task);

// consumer
while (true) {
    Task t = q.take();   // блокирует, пока не появится
    process(t);
}

Реализации:

  • ArrayBlockingQueue — bounded, array, single lock;
  • LinkedBlockingQueue — optionally bounded, два lock-а (head/tail), выше throughput;
  • SynchronousQueue — ёмкость 0, put ждёт take;
  • PriorityBlockingQueue — heap, без bounded;
  • DelayQueue — элементы доступны после delay;
  • LinkedTransferQueue (Java 7) — высокопроизводительная.

Используется в ThreadPoolExecutor для очереди задач.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.