Thursday, January 16, 2014

Another example of DeadLock

//example of deadlock.

class deadExp1
{
synchronized void foo(deadExp2 de2)
{
String name=Thread.currentThread().getName();

System.out.println(name + " Entered deadExp1.foo");

try
{
Thread.sleep(500);
}
catch(Exception e){}
System.out.println(name + " Trying to call deadExp2.last()");
de2.last();
}
synchronized void last()
{
System.out.println("Inside deadExp1.last");
}
}
class deadExp2
{
synchronized void bar(deadExp1 de1)
{
String name=Thread.currentThread().getName();
System.out.println(name + " Entered deadExp2.bar");

try
{
Thread.sleep(500);
}
catch(Exception e){}

System.out.println(name + "trying to call deadExp1.last()");
de1.last();
}
synchronized void last()
{
System.out.println("Inside deadExp1.last");
}
}
class deadExp3 implements  Runnable
{
deadExp1 de1=new deadExp1();
deadExp2 de2=new deadExp2();

deadExp3()
{
Thread.currentThread().setName("Mahi");
Thread t=new Thread(this,"Racing");
t.start();

de1.foo(de2);
System.out.println("Back in main Thread");
}
public void run()
{
de2.bar(de1);
System.out.println("Back in other Thread");
}
public static void main(String surat[])
{
new deadExp3();
}
}

Output:

No comments:

Post a Comment