什么是死锁?
加了同步的多线程,当多个线程共同访问互斥资源(多个共享资源,但是访问顺序相反)时,由于访问顺序相反,导致程序锁死的现象。
public class DeadLock死锁 {
public static void main(String[] args) {
AThread a=new AThread();
AThread a1=new AThread();
a.flag=1;
a1.flag=2;
a.start();
a1.start();
}
}
class AThread extends Thread{
int flag ;
//静态资源
static Object o1=new Object();
static Object o2=new Object();
@Override
public void run() {
if(flag==1) {
synchronized (o1) {
System.out.println("1===========o1");
synchronized (o2) {
System.out.println("1===========o2");
}
}
}
if(flag==2) {
synchronized (o2) {
System.out.println("2===========o2");
synchronized (o1) {
System.out.println("2===========o1");
}
}
}
}
}
可以理解为
a、a1线程开始运行,a线程开始拿到o1的钥匙,a1线程拿到o2的钥匙,当线程结束运行的时候,才会释放对象,也就相当于归还钥匙
再去看代码 运行到o1后,a线程没有o2钥匙,只能等待,而a1线程也没有o1的钥匙,只能等待,两个线程要想继续运行下去,都需要对方的钥匙,但是只有线程运行完才会释放对象,归还钥匙,所以两个线程就这样一直等待,造成死锁
a