1、线程A获得lock1锁,睡一下,然后期望获得lock2锁;
static class A extends Thread{
@Override
public void run() {
//先获取lock1锁
synchronized(lock1){
//睡一下
try {
Thread.sleep(100);
}
catch (InterruptedException e) {
e.printStackTrace();
}
//再获取lock2锁
synchronized(lock2){
System.out.println("A run ok.");
}
}
}
}
2、线程B获得lock2锁,睡一下,然后期望获得lock1锁;
static class B extends Thread{
@Override
public void run() {
//先获取lock2锁
synchronized(lock2){
//睡一下
try {
Thread.sleep(100);
}
catch (InterruptedException e) {
e.printStackTrace();
}
//再获取lock1锁
synchronized(lock1){
System.out.println("B run ok.");
}
}
}
}
3、启动代码;
Thread a = new A();
Thread b = new B();
a.start();
b.start();
4、分析;
//1、a线程把lock1持有,b线程把lock2持有;
//2、a线程期待获得b线程持有的lock2锁;
//3、b线程期待获得a线程持有的lock1锁;
//4、a、b都希望获得对方的锁,才愿意释放对方需要的锁;
//5、死锁于是产生