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

    1. public class DeadLockDemo {
    2. public static void main(String[] args) {
    3. Object obj1 = new Object();
    4. Object obj2 = new Object();
    5. new Thread(() -> {
    6. synchronized (obj1) {
    7. System.out.println(Thread.currentThread().getName() + "->拿到锁1");
    8. try {
    9. Thread.sleep(1000);
    10. } catch (InterruptedException e) {
    11. e.printStackTrace();
    12. }
    13. System.out.println(Thread.currentThread().getName() + "->等待锁2释放...");
    14. synchronized (obj2) {
    15. System.out.println(Thread.currentThread().getName() + "->拿到锁2");
    16. }
    17. }
    18. }).start();
    19. new Thread(() -> {
    20. synchronized (obj2) {
    21. System.out.println(Thread.currentThread().getName() + "->拿到锁2");
    22. try {
    23. Thread.sleep(1000);
    24. } catch (InterruptedException e) {
    25. e.printStackTrace();
    26. }
    27. System.out.println(Thread.currentThread().getName() + "->等待锁1释放...");
    28. synchronized (obj1) {
    29. System.out.println(Thread.currentThread().getName() + "->拿到锁1");
    30. }
    31. }
    32. }).start();
    33. }
    34. }

    运行结果:

    1. Thread-0->拿到锁1
    2. Thread-1->拿到锁2
    3. Thread-0->等待锁2释放...
    4. Thread-1->等待锁1释放...