lass ThreadA {
static int k;
public static void main(
String[] args) {
ThreadB b = new ThreadB();
b.start();
synchronized(b) { // Assume main
thread acquires lock before lock ThreadB
try {
b.wait(1);
for (int i = 0; i < 10; i++) { // line (1)
System.out.println("ThreadA : " + k++);
Thread.sleep(1000);
}
} catch (InterruptedException e) {}
}
}
}
class ThreadB extends Thread {
static int k;
public void run() {
synchronized(this) {
try {
for (int i = 0; i < 10; i++) {
System.out.println("ThreadB : " + k++);
Thread.sleep(1000);
}
} catch (InterruptedException ie) {}
notify();
} // line (2)
}
}
/*
Once main Thread comes out of wait state(Coz 1msec has completed)
it waits to acquire lock on Object b before continuing from line (1)
-->which happens only after ThreadB completes line (2)
Am I Right??? So o/p will be ThreadB : 0...ThreadB : 9
followed by ThreadA : 0...ThreadA : 9 */