死锁的形成主要是因为锁的不当运用,典型的是锁的嵌套所导致的死锁现象,从而引发两个线程相互等待的情况,最终导致死锁。
代码如下:
class Dead implements Runnable
{
private boolean flag;
Dead(boolean flag)
{
this.flag=flag;
}
public void run()
{
if (flag)
{
while (true)
{
synchronized(Demo.obj1)
{
System.out.println("if obj1");
synchronized(Demo.obj2)
{
System.out.println("if obj2");
}
}
}
}
else
while (true)
{
synchronized(Demo.obj2)
{
System.out.println("else obj2");
synchronized(Demo.obj1)
{
System.out.println("else obj1");
}
}
}
}
}
class Demo
{
static Object obj1=new Object();
static Object obj2=new Object();
}
class DeadLock
{
public static void main(String[] args)
{
Thread t1=new Thread(new Dead(true));
Thread t2=new Thread(new Dead(false));
t1.start();
t2.start();
}
}
打印结果为:
if obj1
else obj2
说明发生了死锁。