public class Test {
//创建两个程序都能共享的锁对象
static Object lock1=new Object();
static Object lock2=new Object();
public static void main(String[] args) {
//创建线程
Thread t = new Thread(new DeadLockThread(true));
Thread t2 = new Thread(new DeadLockThread(false));
t.start();
t2.start();
}
System.out.println("get...lock2");
}
}
System.out.println("get...lock1");
}
}
}
}
//创建两个程序都能共享的锁对象
static Object lock1=new Object();
static Object lock2=new Object();
public static void main(String[] args) {
//创建线程
Thread t = new Thread(new DeadLockThread(true));
Thread t2 = new Thread(new DeadLockThread(false));
t.start();
t2.start();
}
}
public class DeadLockThread implements Runnable {
//定义判断标志
public boolean flag;
//定义构造方法传入判断变量
public DeadLockThread(boolean flag){
this.flag=flag;
}
@Override
public void run() {
// TODO Auto-generated method stub
if(flag){
//线程1拥有lock1资源
System.out.println("get...lock1");
//线程1要访问lock2的资源,而lock2已被线程2拥有,线程1只能等待线程2释放才能访问,获得Lock2锁
System.out.println("get...lock2");
}
}
}else{
//线程2拥有lock2锁的资源
System.out.println("get...lock2");
//线程2要访问lock1的资源,而lock1被线程1拥有,线程2必须等待线程1执行完才能访问,导致lock1锁.
synchronized (Test.lock1) {System.out.println("get...lock1");
}
}
}
}
}
最后运行结果:
get...lock2
get...lock1
线程1 lock2锁
线程2 lock1锁