From 741d8c73808451e3f8d6171187bdc2177a3f9784 Mon Sep 17 00:00:00 2001 From: svit7 Date: Mon, 16 Mar 2026 19:27:27 +0200 Subject: [PATCH 1/3] HW "Blocking queue" --- .../java/core/basesyntax/BlockingQueue.java | 17 ++++++++++++----- .../java/core/basesyntax/thread/Consumer.java | 15 ++++++++++----- .../java/core/basesyntax/thread/Producer.java | 10 ++++++---- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/main/java/core/basesyntax/BlockingQueue.java b/src/main/java/core/basesyntax/BlockingQueue.java index 77a20440..daf35fb6 100644 --- a/src/main/java/core/basesyntax/BlockingQueue.java +++ b/src/main/java/core/basesyntax/BlockingQueue.java @@ -12,16 +12,23 @@ public BlockingQueue(int capacity) { } public synchronized void put(T element) throws InterruptedException { - // write your code here + while (queue.size() == capacity) { + wait(); + } + queue.add(element); + notifyAll(); } public synchronized T take() throws InterruptedException { - // write your code here - return null; + while (queue.isEmpty()) { + wait(); + } + T element = queue.remove(); + notifyAll(); + return element; } public synchronized boolean isEmpty() { - // write your code here - return true; + return queue.isEmpty(); } } diff --git a/src/main/java/core/basesyntax/thread/Consumer.java b/src/main/java/core/basesyntax/thread/Consumer.java index a28994fa..197ec6c8 100644 --- a/src/main/java/core/basesyntax/thread/Consumer.java +++ b/src/main/java/core/basesyntax/thread/Consumer.java @@ -11,12 +11,17 @@ public Consumer(BlockingQueue blockingQueue) { @Override public void run() { - while (!blockingQueue.isEmpty()) { - try { - System.out.println("Took value " + blockingQueue.take()); - } catch (InterruptedException e) { - throw new RuntimeException("Consumer was interrupted!", e); + try { + while (true) { + Integer value = blockingQueue.take(); + if (value == null) { + break; + } + System.out.println("Consumed " + value); } + System.out.println("Consumer finished."); + } catch (InterruptedException e) { + System.out.println("Consumer was interrupted!"); } } } diff --git a/src/main/java/core/basesyntax/thread/Producer.java b/src/main/java/core/basesyntax/thread/Producer.java index a08376ce..fe502c0c 100644 --- a/src/main/java/core/basesyntax/thread/Producer.java +++ b/src/main/java/core/basesyntax/thread/Producer.java @@ -11,12 +11,14 @@ public Producer(BlockingQueue blockingQueue) { @Override public void run() { - for (int i = 0; i < 50; i++) { - try { + try { + for (int i = 0; i < 50; i++) { blockingQueue.put(i); - } catch (InterruptedException e) { - throw new RuntimeException("Producer was interrupted!", e); + System.out.println("Produced " + i); } + blockingQueue.put(null); + } catch (InterruptedException e) { + System.out.println("Producer was interrupted!"); } } } From d15acc508150345ab24e58629fa198d9c289f074 Mon Sep 17 00:00:00 2001 From: svit7 Date: Mon, 16 Mar 2026 19:28:32 +0200 Subject: [PATCH 2/3] HW "Blocking queue" --- src/main/java/core/basesyntax/BlockingQueue.java | 4 ++-- src/main/java/core/basesyntax/thread/Consumer.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/core/basesyntax/BlockingQueue.java b/src/main/java/core/basesyntax/BlockingQueue.java index daf35fb6..e68c1e73 100644 --- a/src/main/java/core/basesyntax/BlockingQueue.java +++ b/src/main/java/core/basesyntax/BlockingQueue.java @@ -4,8 +4,8 @@ import java.util.Queue; public class BlockingQueue { - private Queue queue = new LinkedList<>(); - private int capacity; + final private Queue queue = new LinkedList<>(); + final private int capacity; public BlockingQueue(int capacity) { this.capacity = capacity; diff --git a/src/main/java/core/basesyntax/thread/Consumer.java b/src/main/java/core/basesyntax/thread/Consumer.java index 197ec6c8..ad9166da 100644 --- a/src/main/java/core/basesyntax/thread/Consumer.java +++ b/src/main/java/core/basesyntax/thread/Consumer.java @@ -3,7 +3,7 @@ import core.basesyntax.BlockingQueue; public class Consumer implements Runnable { - private BlockingQueue blockingQueue; + private final BlockingQueue blockingQueue; public Consumer(BlockingQueue blockingQueue) { this.blockingQueue = blockingQueue; From fefb47ceeeeac899a1ccabfd8eb4f43bd47681ff Mon Sep 17 00:00:00 2001 From: svit7 Date: Mon, 16 Mar 2026 19:31:07 +0200 Subject: [PATCH 3/3] HW "Blocking queue" --- src/main/java/core/basesyntax/BlockingQueue.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/core/basesyntax/BlockingQueue.java b/src/main/java/core/basesyntax/BlockingQueue.java index e68c1e73..daf35fb6 100644 --- a/src/main/java/core/basesyntax/BlockingQueue.java +++ b/src/main/java/core/basesyntax/BlockingQueue.java @@ -4,8 +4,8 @@ import java.util.Queue; public class BlockingQueue { - final private Queue queue = new LinkedList<>(); - final private int capacity; + private Queue queue = new LinkedList<>(); + private int capacity; public BlockingQueue(int capacity) { this.capacity = capacity;