死锁
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。
比如,当线程 A 持有独占锁 a,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b,并尝试获取独占锁 a 的情况下,就会发生 A B 两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。
死锁示意图如下所示:
死锁代码:
Object obj1 = new Object();Object obj2 = new Object();// 线程1拥有对象1,想要等待获取对象2new Thread() {@Overridepublic void run() {synchronized (obj1) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (obj2) {System.out.println(Thread.currentThread().getName());}}}}.start();// 线程2拥有对象2,想要等待获取对象1new Thread() {@Overridepublic void run() {synchronized (obj2) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (obj1) {System.out.println(Thread.currentThread().getName());}}}}.start();
