两个或者以上线程在执行过程中因为争夺资源产生的一种相互等待的现象;
具体产生是可能是由于同步嵌套引起的;
public class MyTest {
public static void main(String[] args) {
MyThread th1 = new MyThread(true);
MyThread th2 = new MyThread(false);
th1.start();
th2.start();
}
}
class ObjectUtils {
//定义两把锁对象
public static final Object objA=new Object();
public static final Object objB = new Object();
}
class MyThread extends Thread {
private boolean flag;
public MyThread(boolean b) {
this.flag = b;
}
@Override
public void run() {
if (flag) {
synchronized (ObjectUtils.objA) {
//true进来后会一直等待B
System.out.println("true 进来了,持有objA");
synchronized (ObjectUtils.objB) {
System.out.println("true 进来了,持有objB");
}
}
} else {
synchronized (ObjectUtils.objB) {
//false进来后会一直等待A
System.out.println("false 进来了,持有objB");
synchronized (ObjectUtils.objA) {
System.out.println("false 进来了,持有objA");
}
}
}
}
}