JAVA-21602 | fixing sync code block (#14318)

This commit is contained in:
Gaetano Piazzolla 2023-06-28 16:48:08 +02:00 committed by GitHub
parent 44179d2187
commit f372563ca2
2 changed files with 26 additions and 28 deletions

View File

@ -17,22 +17,21 @@ public class Consumer implements Runnable {
public void consume() { public void consume() {
while (dataQueue.runFlag) { while (dataQueue.runFlag) {
synchronized (dataQueue) { while (dataQueue.isEmpty() && dataQueue.runFlag) {
while (dataQueue.isEmpty() && dataQueue.runFlag) { try {
try { dataQueue.waitOnEmpty();
dataQueue.waitOnEmpty(); } catch (InterruptedException e) {
} catch (InterruptedException e) { e.printStackTrace();
e.printStackTrace();
break;
}
}
if (!dataQueue.runFlag) {
break; 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"); log.info("Consumer Stopped");
} }
@ -40,7 +39,7 @@ public class Consumer implements Runnable {
private void useMessage(Message message) { private void useMessage(Message message) {
if (message != null) { if (message != null) {
log.info(String.format("[%s] Consuming Message. Id: %d, Data: %f%n", 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 //Sleeping on random time to make it realistic
ThreadUtil.sleep((long) (message.getData() * 100)); ThreadUtil.sleep((long) (message.getData() * 100));

View File

@ -19,22 +19,21 @@ public class Producer implements Runnable {
public void produce() { public void produce() {
while (dataQueue.runFlag) { while (dataQueue.runFlag) {
synchronized (dataQueue) { while (dataQueue.isFull() && dataQueue.runFlag) {
while (dataQueue.isFull() && dataQueue.runFlag) { try {
try { dataQueue.waitOnFull();
dataQueue.waitOnFull(); } catch (InterruptedException e) {
} catch (InterruptedException e) { e.printStackTrace();
e.printStackTrace();
break;
}
}
if (!dataQueue.runFlag) {
break; 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"); log.info("Producer Stopped");
} }
@ -42,7 +41,7 @@ public class Producer implements Runnable {
private Message generateMessage() { private Message generateMessage() {
Message message = new Message(incrementAndGetId(), Math.random()); Message message = new Message(incrementAndGetId(), Math.random());
log.info(String.format("[%s] Generated Message. Id: %d, Data: %f%n", 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 //Sleeping on random time to make it realistic
ThreadUtil.sleep((long) (message.getData() * 100)); ThreadUtil.sleep((long) (message.getData() * 100));