From 8d9f1fb8caeb91ef2b0ca52e069ea0c263143dd2 Mon Sep 17 00:00:00 2001 From: Gaetano Piazzolla Date: Wed, 28 Jun 2023 16:48:08 +0200 Subject: [PATCH] JAVA-21602 | fixing sync code block (#14318) --- .../baeldung/producerconsumer/Consumer.java | 27 +++++++++---------- .../baeldung/producerconsumer/Producer.java | 27 +++++++++---------- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Consumer.java b/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Consumer.java index 933a1b5f52..9c880025f7 100644 --- a/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Consumer.java +++ b/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Consumer.java @@ -17,22 +17,21 @@ public class Consumer implements Runnable { public void consume() { while (dataQueue.runFlag) { - synchronized (dataQueue) { - while (dataQueue.isEmpty() && dataQueue.runFlag) { - try { - dataQueue.waitOnEmpty(); - } catch (InterruptedException e) { - e.printStackTrace(); - break; - } - } - if (!dataQueue.runFlag) { + while (dataQueue.isEmpty() && dataQueue.runFlag) { + try { + dataQueue.waitOnEmpty(); + } catch (InterruptedException e) { + e.printStackTrace(); break; } - Message message = dataQueue.remove(); - dataQueue.notifyAllForFull(); - useMessage(message); } + if (!dataQueue.runFlag) { + break; + } + Message message = dataQueue.remove(); + dataQueue.notifyAllForFull(); + useMessage(message); + } log.info("Consumer Stopped"); } @@ -40,7 +39,7 @@ public class Consumer implements Runnable { private void useMessage(Message message) { if (message != null) { log.info(String.format("[%s] Consuming Message. Id: %d, Data: %f%n", - Thread.currentThread().getName(), message.getId(), message.getData())); + Thread.currentThread().getName(), message.getId(), message.getData())); //Sleeping on random time to make it realistic ThreadUtil.sleep((long) (message.getData() * 100)); diff --git a/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Producer.java b/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Producer.java index ca89d0c866..5ca60a29e4 100644 --- a/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Producer.java +++ b/core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Producer.java @@ -19,22 +19,21 @@ public class Producer implements Runnable { public void produce() { while (dataQueue.runFlag) { - synchronized (dataQueue) { - while (dataQueue.isFull() && dataQueue.runFlag) { - try { - dataQueue.waitOnFull(); - } catch (InterruptedException e) { - e.printStackTrace(); - break; - } - } - if (!dataQueue.runFlag) { + while (dataQueue.isFull() && dataQueue.runFlag) { + try { + dataQueue.waitOnFull(); + } catch (InterruptedException e) { + e.printStackTrace(); break; } - Message message = generateMessage(); - dataQueue.add(message); - dataQueue.notifyAllForEmpty(); } + if (!dataQueue.runFlag) { + break; + } + Message message = generateMessage(); + dataQueue.add(message); + dataQueue.notifyAllForEmpty(); + } log.info("Producer Stopped"); } @@ -42,7 +41,7 @@ public class Producer implements Runnable { private Message generateMessage() { Message message = new Message(incrementAndGetId(), Math.random()); log.info(String.format("[%s] Generated Message. Id: %d, Data: %f%n", - Thread.currentThread().getName(), message.getId(), message.getData())); + Thread.currentThread().getName(), message.getId(), message.getData())); //Sleeping on random time to make it realistic ThreadUtil.sleep((long) (message.getData() * 100));