Пример простейшего многопоточного ограниченного буфера с использованием ReentrantLock: import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class BoundedBuffer<T> {
private int capacity;
private Queue<T> buffer;
private ReentrantLock lock;
private Condition notFullCondition;
private Condition notEmptyCondition;
public BoundedBuffer(int capacity) {
this.capacity = capacity;
this.buffer = new LinkedList<>();
this.lock = new ReentrantLock();
this.notFullCondition = lock.newCondition();
this.notEmptyCondition = lock.newCondition();
}
public void put(T element) throws InterruptedException {
lock.lock();
try {
while (buffer.size() == capacity) {
notFullCondition.await();
}
buffer.offer(element);
notEmptyCondition.signalAll();
} f