diff --git a/src/main/java/hse/java/lectures/lecture6/tasks/queue/BoundedBlockingQueue.java b/src/main/java/hse/java/lectures/lecture6/tasks/queue/BoundedBlockingQueue.java index 5c686cff..79bffb6c 100644 --- a/src/main/java/hse/java/lectures/lecture6/tasks/queue/BoundedBlockingQueue.java +++ b/src/main/java/hse/java/lectures/lecture6/tasks/queue/BoundedBlockingQueue.java @@ -1,25 +1,51 @@ package hse.java.lectures.lecture6.tasks.queue; +import java.util.LinkedList; +import java.util.Queue; + public class BoundedBlockingQueue { + int capacity; + Queue queue = new LinkedList(); public BoundedBlockingQueue(int capacity) { + if (capacity <= 0){ + throw new IllegalArgumentException(); + } + this.capacity = capacity; } - public void put(T item) { + public synchronized void put(T item) throws InterruptedException { + if (item == null){ + throw new IllegalArgumentException(); + } + + while (queue.size() == capacity){ + + wait(); + } + + queue.offer(item); + notifyAll(); } - public T take() { - return null; + public synchronized T take() throws InterruptedException { + while (queue.isEmpty()){ + + wait(); + } + T item = queue.poll(); + notifyAll(); + return item; } - public int size() { - return 0; + public synchronized int size() { + return queue.size(); } public int capacity() { - return 0; + return capacity; } }