Паттерн Producer-Consumer удобно реализовывать в Java с помощью BlockingQueue — потокобезопасной коллекции, разработанной для параллельных операций.
BlockingQueue — это часть пакета java.util.concurrent и предоставляет встроенные механизмы синхронизации. Она автоматически берёт на себя:
Паттерн состоит из трёх основных компонентов:
put()take()BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(10);
// Поток Producer
new Thread(() -> {
try {
queue.put(data);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}).start();
// Поток Consumer
new Thread(() -> {
try {
Integer data = queue.take();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}).start();
Этот подход особенно полезен для сценариев, требующих асинхронной обработки и балансировки нагрузки между компонентами.
Метод BlockingQueue.put() будет блокировать поток производителя неопределённо долго, если очередь достигла максимальной ёмкости.
Новый — ещё не проверен сообществом
Вы