死锁是一种状态,当两个(或多个)线程(或进程)相互持有对方所需要的资源,却又都不主动释放自己手中所持有的资源,导致大家都获取不到自己想要的资源,所有相关的线程(或进程)都无法继续往下执行,在未改变这种状态之前都不能向前推进,我们就把这种状态称为死锁状态,认为它们发生了死锁。
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->拿到锁1
Thread-1->拿到锁2
Thread-0->等待锁2释放...
Thread-1->等待锁1释放...