[JAVA-13958] Minor style changes + aligned code with article (#12889)
Co-authored-by: panagiotiskakos <panagiotis.kakos@libra-is.com>
This commit is contained in:
parent
adbb7e27bc
commit
7313894322
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user