1. What will be the output of the program? public class Test { public static void main (String [] args) { final Foo f = new Foo(); Thread t = new Thread(new Runnable() { public void run() { f.doStuff(); } }); Thread g = new Thread() { public void run() { f.doStuff(); } }; t.start(); g.start(); } } class Foo { int x = 5; public void doStuff() { if (x < 10) { // nothing to do try { wait(); } catch(InterruptedException ex) { } } else { System.out.println("x is " + x++); if (x >= 10) { notify(); } } } }
Ask Your Doubts Here
Comments
By: guest on 02 Jun 2017 01.26 am
C is correct because the thread does not own the lock of the object it invokes wait() on. If the method were synchronized, the code would run without exception. A, B are incorrect because the code compiles without errors. D is incorrect because the exception is thrown before there is any output.