死锁出现的原因:
当程序中有多个同步时,且同步代码块相嵌套时,可能会导致死锁问题的出现。
例
synchronized(锁a){
synchronized(锁b){
}
}
下面来实现死锁;
首先先定义两个唯一锁:
class MyLock {
public static final Objcet locka = new Object();
public static final Object lockb = new Object();
}
定义死锁类:
class DeadLock implements Runnable {
private int i = 0;
public void run(){
while(true){
if(i%2==0){
synchronized(MyLock.locka){
System.out.println("if..locka");
synchronized(MyLock.lockb){
System.out.println("if..lockb");
}
}
}else{
if(i%2==1){
synchronized(MyLock.lockb){
System.out.println("else...lockb");
synchronized(Mylock.locka){
Ststem.out.println("else...locka");
}
}
}
i++;
}
}
}
}
编写运行类
public static void main(String[] args) {
DeadLock deadlock = new DeadLock();
Thread t1 = new Thread(deadlock);
Thread t2 = new Thread(deadlock);
t1.start();
t2.start();
}
运行结果:
分析:
当程序运行到最后两行时;else先把lockb锁给拿到,然后if拿到了 locka锁 这样导致了双方解锁的锁在对方手里,达成了死锁效果。就例如(两人打架…互相拽着对方的头发说…你先放手…)