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)
Nice one… i think the sub-output “Exception in thread “Thread-1” can come in anyorder when run multiple times 🙂
LikeLike
🙂 Yes threads will execute in anyorder but Thread which is used for Peter will never execute successfully due to NULL lock. Hence Rozer will be always in dance.
Basically here I wanted to focus on concept of NULL lock.
Thanks for your visit !!
LikeLike
Thanks for the so quick response 🙂
LikeLike