package com.itheima;
class MyLock
{
//定义两个Lock对象,代表两把锁
static MyLock locka = new MyLock ();
static MyLock lockb = new MyLock ();
}
class DeadLock implements Runnable
{
//定义一个标识符
boolean flag;
DeadLock(boolean flag)
{
this.flag = flag;
}
@Override
public void run()
{
if(flag)
{
synchronized(MyLock.locka)
{
System.out.println("if locka");
//lockb被另一个线程持有
synchronized(MyLock.lockb)
{
System.out.println("if lockb");
}
}
}
else
{
synchronized(MyLock.lockb)
{
System.out.println("else lockb");
//locka被另一个线程持有
synchronized(MyLock.locka)
{
System.out.println("else locka");
}
}
}
}
}
public class Test026
{
/**
* 死锁的出现时因为同步代码块中嵌套同步代码块
* @param args
*/
public static void main(String[] args)
{
DeadLock dl1 = new DeadLock(true);
DeadLock dl2 = new DeadLock(false);
new Thread(dl1).start();
new Thread(dl2).start();
}
}
|
|