22. Two Threads Run Sequentially Program - prabhatrocks07/Core-Java-Programming GitHub Wiki
public class PrintEvenOddTester {
public static void main(String[] args) {
Printer printer = new Printer();
Thread t1 = new Thread(new TaskEvenOdd(10, printer, false));
Thread t2 = new Thread(new TaskEvenOdd(10, printer, true));
t1.start();
t2.start();
}
}
class TaskEvenOdd implements Runnable {
private int max;
private Printer printer;
private boolean isEvenNumber;
public TaskEvenOdd(int max, Printer printer, boolean isEvenNumber) {
super();
this.max = max;
this.printer = printer;
this.isEvenNumber = isEvenNumber;
}
@Override
public void run() {
int number = isEvenNumber ? 2 : 1;
while(number <= max) {
if(isEvenNumber) {
printer.printEven(number);
} else {
printer.printOdd(number);
}
number += 2;
}
}
}
class Printer {
boolean isOdd;
synchronized void printEven(int number) {
while(!isOdd) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Even : " + number);
isOdd = false;
notifyAll();
}
synchronized void printOdd(int number) {
while(isOdd) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Odd : " + number);
isOdd = true;
notifyAll();
}
}