//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:
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