死锁的定义
所谓死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
死锁产生的原因
在申请锁时发生了交叉闭环申请。即线程在获得了锁A并且没有释放的情况下去申请锁B,这时,另一个线程已经获得了锁B,在释放锁B之前又要先获得锁A,因此闭环发生,陷入死锁循环。
手写一个死锁
private static Object lockA = new Object();
private static Object lockB= new Object();
public static void main(String[] args) {
deadLock();
}
public static void deadLock(){
Thread t1 = new Thread(()->{
synchronized (lockA){
System.out.println("thread1 get lockA");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB){
System.out.println("thread get lockB");
}
}
System.out.println("thread1 end");
});
Thread t2 = new Thread(()->{
synchronized (lockB){
System.out.println("thread2 get lockB");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockA){
System.out.println("thread2 get lockA");
}
}
System.out.println("thread2 end");
});
t1.start();
t2.start();
}