#493 Производитель и потребитель с ограниченным буфером
Дано два потока — производитель и потребитель. Производитель генерирует некоторые данные (например — числа). Потребитель «потребляет» их.
Два потока разделяют общий буфер данных, размер которого ограничен.
Если буфер пуст, потребитель должен ждать, пока там появятся данные.
Если буфер заполнен полностью, производитель должен ждать, пока потребитель заберёт данные и место освободится.
Необходимо реализовать методы run и produce:
public class Main {
public static void main(String... args) {
LinkedList<Double> sharedQueue = new LinkedList<>();
int size = 4;
Thread prodThread = new Thread(new Producer(sharedQueue, size), "Producer");
Thread consThread = new Thread(new Consumer(sharedQueue), "Consumer");
prodThread.start();
consThread.start();
}
}
class Producer implements Runnable {
// Общая очередь
private final Queue<Double> sharedQueue;
// Максимальный размер
private final int SIZE;
// Конструктор
public Producer(Queue<Double> sharedQueue, int size) {
this.sharedQueue = sharedQueue;
this.SIZE = size;
}
@Override
public void run() {
throw new UnsupportedOperationException("Implemented it!");
}
private double produce() throws InterruptedException {
throw new UnsupportedOperationException("Implemented it!");
}
}
class Consumer implements Runnable {
// Общая очередь
private final Queue<Double> sharedQueue;
public Consumer(Queue<Double> sharedQueue) {
this.sharedQueue = sharedQueue;
}
@Override
public void run() {
throw new UnsupportedOperationException("Implemented it!");
}
private Double consume() throws InterruptedException {
throw new UnsupportedOperationException("Implemented it!");
}
}
Разбор вопроса
Войди, чтобы начать диалог
Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти
Доступно с Premium
Это лишь одно из решений, доступных с Premium. А ещё:
- 250+ продвинутых лекций
- 1300+ практических заданий
- 500+ решений задач с реальных собеседований
- Именные сертификаты Java Hub
- Расширенный доступ к AI-ментору