diff --git a/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java b/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java index 533f4e111d..def4eba92d 100644 --- a/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java +++ b/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java @@ -2,38 +2,40 @@ package com.baeldung.concurrent.waitandnotify; public class Data { private String packet; - + // True if receiver should wait // False if sender should wait private boolean transfer = true; - + public synchronized String receive() { while (transfer) { try { wait(); } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - System.out.println("Thread Interrupted"); + Thread.currentThread() + .interrupt(); + System.err.println("Thread Interrupted"); } } transfer = true; - + String returnPacket = packet; notifyAll(); return returnPacket; } - + public synchronized void send(String packet) { while (!transfer) { - try { + try { wait(); } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - System.out.println("Thread Interrupted"); + Thread.currentThread() + .interrupt(); + System.err.println("Thread Interrupted"); } } transfer = false; - + this.packet = packet; notifyAll(); } diff --git a/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java b/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java index d4fd1574c6..ab62397e0b 100644 --- a/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java +++ b/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java @@ -5,7 +5,7 @@ public class NetworkDriver { Data data = new Data(); Thread sender = new Thread(new Sender(data)); Thread receiver = new Thread(new Receiver(data)); - + sender.start(); receiver.start(); } diff --git a/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java b/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java index 21ba822bfd..f17f1a2b75 100644 --- a/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java +++ b/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java @@ -4,24 +4,24 @@ import java.util.concurrent.ThreadLocalRandom; public class Receiver implements Runnable { private Data load; - + public Receiver(Data load) { this.load = load; } - + public void run() { - for(String receivedMessage = load.receive(); - !"End".equals(receivedMessage) ; - receivedMessage = load.receive()) { - + for (String receivedMessage = load.receive(); !"End".equals(receivedMessage); receivedMessage = load.receive()) { + System.out.println(receivedMessage); //Thread.sleep() to mimic heavy server-side processing try { - Thread.sleep(ThreadLocalRandom.current().nextInt(1000, 5000)); + Thread.sleep(ThreadLocalRandom.current() + .nextInt(1000, 5000)); } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - System.out.println("Thread Interrupted"); + Thread.currentThread() + .interrupt(); + System.err.println("Thread Interrupted"); } } } diff --git a/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java b/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java index c365294cdd..95d52ef639 100644 --- a/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java +++ b/core-java-modules/core-java-concurrency-simple/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java @@ -4,29 +4,25 @@ import java.util.concurrent.ThreadLocalRandom; public class Sender implements Runnable { private Data data; - + public Sender(Data data) { this.data = data; } - + public void run() { - String packets[] = { - "First packet", - "Second packet", - "Third packet", - "Fourth packet", - "End" - }; - + String packets[] = { "First packet", "Second packet", "Third packet", "Fourth packet", "End" }; + for (String packet : packets) { data.send(packet); - + //Thread.sleep() to mimic heavy server-side processing try { - Thread.sleep(ThreadLocalRandom.current().nextInt(1000, 5000)); + Thread.sleep(ThreadLocalRandom.current() + .nextInt(1000, 5000)); } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - System.out.println("Thread Interrupted"); + Thread.currentThread() + .interrupt(); + System.err.println("Thread Interrupted"); } } } diff --git a/core-java-modules/core-java-concurrency-simple/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java b/core-java-modules/core-java-concurrency-simple/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java index 473fe6ff8e..bd642a36bd 100644 --- a/core-java-modules/core-java-concurrency-simple/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java +++ b/core-java-modules/core-java-concurrency-simple/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java @@ -16,24 +16,24 @@ public class NetworkIntegrationTest { private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); private final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); private String expected; - + @Before public void setUpStreams() { System.setOut(new PrintStream(outContent)); System.setErr(new PrintStream(errContent)); } - + @Before public void setUpExpectedOutput() { StringWriter expectedStringWriter = new StringWriter(); - + PrintWriter printWriter = new PrintWriter(expectedStringWriter); printWriter.println("First packet"); printWriter.println("Second packet"); printWriter.println("Third packet"); printWriter.println("Fourth packet"); printWriter.close(); - + expected = expectedStringWriter.toString(); } @@ -42,25 +42,26 @@ public class NetworkIntegrationTest { System.setOut(null); System.setErr(null); } - + @Test public void givenSenderAndReceiver_whenSendingPackets_thenNetworkSynchronized() { Data data = new Data(); Thread sender = new Thread(new Sender(data)); Thread receiver = new Thread(new Receiver(data)); - + sender.start(); receiver.start(); - + //wait for sender and receiver to finish before we test against expected try { sender.join(); receiver.join(); } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - System.out.println("Thread Interrupted"); + Thread.currentThread() + .interrupt(); + System.err.println("Thread Interrupted"); } - + assertEquals(expected, outContent.toString()); } }