My new post is going to take little more time so thought of to post solution of this long pending problem posted by me on November 1, 2014
public class DecideDancePair { DecideDancePair ddp1; StringBuffer ddp2 = new StringBuffer(); public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { synchronized (DecideDancePair.class) { System.out.println("Its weekend .... Hey Guys !! this is Nancy , who will dance with me? "); } } }).start(); new Thread(new Runnable() { @Override public void run() { synchronized (new DecideDancePair().ddp1) { System.out.println("Hey Nancy !! this is Peter , I will dance with you."); } } }).start(); new Thread(new Runnable() { @Override public void run() { synchronized (new DecideDancePair().ddp2) { System.out.println("Hey Nancy !! this is Rozer , I will dance with you."); } } }).start(); } }
==============================
Soln :
Nancy will always go for dance because she having Lock over a object which is not NULL. same with Rozer , he is also having a non-NULL lock. while poor Peter is caught with NULL object Lock so that piece of code will throw below exception and Hence Nancy and Rozer will be in dance 🙂 !!!
Code execution will looks like :
Its weekend .... Hey Guys !! this is Nancy , who will dance with me? Exception in thread "Thread-1" Hey Nancy !! this is Rozer , I will dance with you. java.lang.NullPointerException at BasicConcepts.DecideDancePair$2.run(DecideDancePair.java:26) at java.lang.Thread.run(Thread.java:745)