Skip to content

Commit f372563

Browse files
JAVA-21602 | fixing sync code block (#14318)
1 parent 44179d2 commit f372563

2 files changed

Lines changed: 26 additions & 28 deletions

File tree

core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Consumer.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,29 @@ public void run() {
1717

1818
public void consume() {
1919
while (dataQueue.runFlag) {
20-
synchronized (dataQueue) {
21-
while (dataQueue.isEmpty() && dataQueue.runFlag) {
22-
try {
23-
dataQueue.waitOnEmpty();
24-
} catch (InterruptedException e) {
25-
e.printStackTrace();
26-
break;
27-
}
28-
}
29-
if (!dataQueue.runFlag) {
20+
while (dataQueue.isEmpty() && dataQueue.runFlag) {
21+
try {
22+
dataQueue.waitOnEmpty();
23+
} catch (InterruptedException e) {
24+
e.printStackTrace();
3025
break;
3126
}
32-
Message message = dataQueue.remove();
33-
dataQueue.notifyAllForFull();
34-
useMessage(message);
3527
}
28+
if (!dataQueue.runFlag) {
29+
break;
30+
}
31+
Message message = dataQueue.remove();
32+
dataQueue.notifyAllForFull();
33+
useMessage(message);
34+
3635
}
3736
log.info("Consumer Stopped");
3837
}
3938

4039
private void useMessage(Message message) {
4140
if (message != null) {
4241
log.info(String.format("[%s] Consuming Message. Id: %d, Data: %f%n",
43-
Thread.currentThread().getName(), message.getId(), message.getData()));
42+
Thread.currentThread().getName(), message.getId(), message.getData()));
4443

4544
//Sleeping on random time to make it realistic
4645
ThreadUtil.sleep((long) (message.getData() * 100));

core-java-modules/core-java-concurrency-advanced-4/src/main/java/com/baeldung/producerconsumer/Producer.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,30 +19,29 @@ public void run() {
1919

2020
public void produce() {
2121
while (dataQueue.runFlag) {
22-
synchronized (dataQueue) {
23-
while (dataQueue.isFull() && dataQueue.runFlag) {
24-
try {
25-
dataQueue.waitOnFull();
26-
} catch (InterruptedException e) {
27-
e.printStackTrace();
28-
break;
29-
}
30-
}
31-
if (!dataQueue.runFlag) {
22+
while (dataQueue.isFull() && dataQueue.runFlag) {
23+
try {
24+
dataQueue.waitOnFull();
25+
} catch (InterruptedException e) {
26+
e.printStackTrace();
3227
break;
3328
}
34-
Message message = generateMessage();
35-
dataQueue.add(message);
36-
dataQueue.notifyAllForEmpty();
3729
}
30+
if (!dataQueue.runFlag) {
31+
break;
32+
}
33+
Message message = generateMessage();
34+
dataQueue.add(message);
35+
dataQueue.notifyAllForEmpty();
36+
3837
}
3938
log.info("Producer Stopped");
4039
}
4140

4241
private Message generateMessage() {
4342
Message message = new Message(incrementAndGetId(), Math.random());
4443
log.info(String.format("[%s] Generated Message. Id: %d, Data: %f%n",
45-
Thread.currentThread().getName(), message.getId(), message.getData()));
44+
Thread.currentThread().getName(), message.getId(), message.getData()));
4645

4746
//Sleeping on random time to make it realistic
4847
ThreadUtil.sleep((long) (message.getData() * 100));

0 commit comments

Comments
 (0)