[JAVA-13958] Minor style changes + aligned code with article (#12889)

Co-authored-by: panagiotiskakos <panagiotis.kakos@libra-is.com>
This commit is contained in:
panos-kakos 2022-11-05 09:58:01 +00:00 committed by GitHub
parent adbb7e27bc
commit 7313894322
5 changed files with 43 additions and 44 deletions

View File

@ -2,38 +2,40 @@ package com.baeldung.concurrent.waitandnotify;
public class Data { public class Data {
private String packet; private String packet;
// True if receiver should wait // True if receiver should wait
// False if sender should wait // False if sender should wait
private boolean transfer = true; private boolean transfer = true;
public synchronized String receive() { public synchronized String receive() {
while (transfer) { while (transfer) {
try { try {
wait(); wait();
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread()
System.out.println("Thread Interrupted"); .interrupt();
System.err.println("Thread Interrupted");
} }
} }
transfer = true; transfer = true;
String returnPacket = packet; String returnPacket = packet;
notifyAll(); notifyAll();
return returnPacket; return returnPacket;
} }
public synchronized void send(String packet) { public synchronized void send(String packet) {
while (!transfer) { while (!transfer) {
try { try {
wait(); wait();
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread()
System.out.println("Thread Interrupted"); .interrupt();
System.err.println("Thread Interrupted");
} }
} }
transfer = false; transfer = false;
this.packet = packet; this.packet = packet;
notifyAll(); notifyAll();
} }

View File

@ -5,7 +5,7 @@ public class NetworkDriver {
Data data = new Data(); Data data = new Data();
Thread sender = new Thread(new Sender(data)); Thread sender = new Thread(new Sender(data));
Thread receiver = new Thread(new Receiver(data)); Thread receiver = new Thread(new Receiver(data));
sender.start(); sender.start();
receiver.start(); receiver.start();
} }

View File

@ -4,24 +4,24 @@ import java.util.concurrent.ThreadLocalRandom;
public class Receiver implements Runnable { public class Receiver implements Runnable {
private Data load; private Data load;
public Receiver(Data load) { public Receiver(Data load) {
this.load = load; this.load = load;
} }
public void run() { public void run() {
for(String receivedMessage = load.receive(); for (String receivedMessage = load.receive(); !"End".equals(receivedMessage); receivedMessage = load.receive()) {
!"End".equals(receivedMessage) ;
receivedMessage = load.receive()) {
System.out.println(receivedMessage); System.out.println(receivedMessage);
//Thread.sleep() to mimic heavy server-side processing //Thread.sleep() to mimic heavy server-side processing
try { try {
Thread.sleep(ThreadLocalRandom.current().nextInt(1000, 5000)); Thread.sleep(ThreadLocalRandom.current()
.nextInt(1000, 5000));
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread()
System.out.println("Thread Interrupted"); .interrupt();
System.err.println("Thread Interrupted");
} }
} }
} }

View File

@ -4,29 +4,25 @@ import java.util.concurrent.ThreadLocalRandom;
public class Sender implements Runnable { public class Sender implements Runnable {
private Data data; private Data data;
public Sender(Data data) { public Sender(Data data) {
this.data = data; this.data = data;
} }
public void run() { public void run() {
String packets[] = { String packets[] = { "First packet", "Second packet", "Third packet", "Fourth packet", "End" };
"First packet",
"Second packet",
"Third packet",
"Fourth packet",
"End"
};
for (String packet : packets) { for (String packet : packets) {
data.send(packet); data.send(packet);
//Thread.sleep() to mimic heavy server-side processing //Thread.sleep() to mimic heavy server-side processing
try { try {
Thread.sleep(ThreadLocalRandom.current().nextInt(1000, 5000)); Thread.sleep(ThreadLocalRandom.current()
.nextInt(1000, 5000));
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread()
System.out.println("Thread Interrupted"); .interrupt();
System.err.println("Thread Interrupted");
} }
} }
} }

View File

@ -16,24 +16,24 @@ public class NetworkIntegrationTest {
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
private String expected; private String expected;
@Before @Before
public void setUpStreams() { public void setUpStreams() {
System.setOut(new PrintStream(outContent)); System.setOut(new PrintStream(outContent));
System.setErr(new PrintStream(errContent)); System.setErr(new PrintStream(errContent));
} }
@Before @Before
public void setUpExpectedOutput() { public void setUpExpectedOutput() {
StringWriter expectedStringWriter = new StringWriter(); StringWriter expectedStringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(expectedStringWriter); PrintWriter printWriter = new PrintWriter(expectedStringWriter);
printWriter.println("First packet"); printWriter.println("First packet");
printWriter.println("Second packet"); printWriter.println("Second packet");
printWriter.println("Third packet"); printWriter.println("Third packet");
printWriter.println("Fourth packet"); printWriter.println("Fourth packet");
printWriter.close(); printWriter.close();
expected = expectedStringWriter.toString(); expected = expectedStringWriter.toString();
} }
@ -42,25 +42,26 @@ public class NetworkIntegrationTest {
System.setOut(null); System.setOut(null);
System.setErr(null); System.setErr(null);
} }
@Test @Test
public void givenSenderAndReceiver_whenSendingPackets_thenNetworkSynchronized() { public void givenSenderAndReceiver_whenSendingPackets_thenNetworkSynchronized() {
Data data = new Data(); Data data = new Data();
Thread sender = new Thread(new Sender(data)); Thread sender = new Thread(new Sender(data));
Thread receiver = new Thread(new Receiver(data)); Thread receiver = new Thread(new Receiver(data));
sender.start(); sender.start();
receiver.start(); receiver.start();
//wait for sender and receiver to finish before we test against expected //wait for sender and receiver to finish before we test against expected
try { try {
sender.join(); sender.join();
receiver.join(); receiver.join();
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread()
System.out.println("Thread Interrupted"); .interrupt();
System.err.println("Thread Interrupted");
} }
assertEquals(expected, outContent.toString()); assertEquals(expected, outContent.toString());
} }
} }