面试的时候好多面试官会要求写一个死锁代码,下面就给大家写一个经典死锁的实例:
1.思想:
* 同步中嵌套同步;
* 通俗讲:线程A在持有锁a并想获得锁b的同时,线程B持有锁b并想获的锁a的情况下,这2个线程将会一直等待下去。
2.实例:
//多线程类【死锁】
class Deck implements Runnale{
private boolean flg;
//带参构造函数
public Deck(boolean flg){
this.flg =flg;
}
public void run(){
if(flg){
synchronized(Lock.LOCK_A){
System.out.println(Thread.currentThread().getName()+"===LOCK_A======true=====");
synchronized(Lock.LOCK_B){
System.out.println(Thread.currentThread().getName()+"===LOCK_B======true=====");
}
}
}else{
synchronized(Lock.LOCK_B){
System.out.println(Thread.currentThread().getName()+"===LOCK_B======false=====");
synchronized(Lock.LOCK_A){
System.out.println(Thread.currentThread().getName()+"===LOCK_A======false=====");
}
}
}
}
}
class Lock{
public static final Object LOCK_A = new Object();
public static final Object LOCK_B = new Object();
}
//测试类
class DeckTest{
public static void main(String[] args){
new Thread(new Deck(true)).start();
new Thread(new Deck(false)).start();
}
}
3:运行效果: