Output question 20.
Java Interview Questions and Answers (part 4)
(Continued from previous question...)
80. Output question 20.
class MyRunnable1 implements Runnable{
@Override
public void run(){
if(Thread.currentThread().getName().equals("Thread-1"))
method1();
else
method2();
}
synchronized void method1(){
System.out.println(Thread.currentThread().getName()+
" in synchronized void method1() started");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+
" in synchronized void method1() ended");
}
synchronized void method2(){
System.out.println(Thread.currentThread().getName()
+" in synchronized void method2() started");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()
+" in synchronized void method2() ended");
}
}
public class MyClass {
public static void main(String args[]) throws InterruptedException{
MyRunnable1 object1=new MyRunnable1();
MyRunnable1 object2=new MyRunnable1();
Thread thread1=new Thread(object1,"Thread-1");
Thread thread2=new Thread(object2,"Thread-2");
thread1.start();
Thread.sleep(10);//Just to ensure Thread-1 starts before Thread-2
thread2.start();
}
}
Answer.
Here when Thread-1 is in synchronized method1() it must be holding lock on object1’s monitor. Thread-2 will acquire lock on object2’s monitor and enter synchronized method2().
/*OUTPUT
Thread-1 in synchronized void method1() started
Thread-2 in synchronized void method2() started
Thread-1 in synchronized void method1() ended
Thread-2 in synchronized void method2() ended
*/
(Continued on next question...)
Other Interview Questions
|