#493 Производитель и потребитель с ограниченным буфером

Компании:
Digital League
Темы:
JavaМногопоточностьПрактика

Дано два потока — производитель и потребитель. Производитель генерирует некоторые данные (например — числа). Потребитель «потребляет» их.

Два потока разделяют общий буфер данных, размер которого ограничен.

Если буфер пуст, потребитель должен ждать, пока там появятся данные.

Если буфер заполнен полностью, производитель должен ждать, пока потребитель заберёт данные и место освободится.

Необходимо реализовать методы 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!");
    }
}

Разбор вопроса

Ментор
Ответь как на реальном собеседовании. Я задам уточняющие вопросы, а затем сравню твой ответ с эталонным и покажу точность в %.
Войди, чтобы начать диалог Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти