死锁是一种状态,当两个(或多个)线程(或进程)相互持有对方所需要的资源,却又都不主动释放自己手中所持有的资源,导致大家都获取不到自己想要的资源,所有相关的线程(或进程)都无法继续往下执行,在未改变这种状态之前都不能向前推进,我们就把这种状态称为死锁状态,认为它们发生了死锁。
public class DeadLockDemo {public static void main(String[] args) {Object obj1 = new Object();Object obj2 = new Object();new Thread(() -> {synchronized (obj1) {System.out.println(Thread.currentThread().getName() + "->拿到锁1");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "->等待锁2释放...");synchronized (obj2) {System.out.println(Thread.currentThread().getName() + "->拿到锁2");}}}).start();new Thread(() -> {synchronized (obj2) {System.out.println(Thread.currentThread().getName() + "->拿到锁2");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "->等待锁1释放...");synchronized (obj1) {System.out.println(Thread.currentThread().getName() + "->拿到锁1");}}}).start();}}
运行结果:
Thread-0->拿到锁1Thread-1->拿到锁2Thread-0->等待锁2释放...Thread-1->等待锁1释放...
