So we have 2 thread, one will be printing odd numbers and others will be printing even number. We have to print them in a synchronized fashion.
class Lock {
Boolean isOdd;
Lock(Boolean odd) {
this.isOdd = odd;
}
synchronized void print(Integer number) {
Boolean numberEven = number %2 == 0;
while (isOdd == numberEven) {
try {
wait();
} catch( InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println(number);
isOdd = !isOdd;
notify();
}
}
class PrintThread extends Thread{
Integer limit;
Integer value;
Lock lock;
PrintThread( Integer start,Integer limit, Lock lock) {
this.value = start;
this.limit = limit;
this.lock = lock;
}
public void run() {
while( value < limit ) {
lock.print(value);
value +=2;
}
}
}
public class Test {
static public void main(String args[]) {
Lock lock = new Lock(false);
PrintThread oddThread = new PrintThread(1,10, lock);
PrintThread evenThread = new PrintThread(0,10, lock);
evenThread.start();
oddThread.start();
}
}
Comments
Post a Comment