What would be the output of the following program ?
public class ThreadTest implements Runnable { private Object obj=new Object(); public static void main(String[] args) { ThreadTest test = new ThreadTest(); Thread t1 = new Thread(test); Thread t2 = new Thread(test); t1.start(); t2.start(); } @Override public void run() { synchronized(obj) { System.out.println("1 " + Thread.currentThread().getId()); obj = new Object(); System.out.println("2 " +Thread.currentThread().getId()); } } }Answer : The lock will break. The reason is that each and every object has got its own Object Monitor. Modifying the object means we will have a new lock object with new monitor. In such a case, lock will break and cause all the threads in the entry set to acquire the monitor.