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 подскажет развёрнутый ответ в реальном времени.