死锁:

    1. 不同线程分别占用对方需要的同步资源不放弃 都在等待对方放弃自己需要的线程资源 就形成了死锁
    2. 出现死锁后 不会出现异常 不会出现提示 只是所有线程都处于阻塞状态 无法继续

    如何处理死锁

    1. 专门的算法、原创
    2. 尽量减少同步资源的定义
    3. 尽量避免嵌套同步 ```java /**
      • 创建人:LYY
      • 创建时间:2022/4/27 *
      • 死锁练习 */ public class LockTest {
    1. public static void main(String[] args) {
    2. DeadLock deadLock = new DeadLock();
    3. // 启动副线程
    4. deadLock.start();
    5. // 启动主线程
    6. deadLock.init();
    7. }

    }

    class DeadLock extends Thread{

    1. B b = new B();
    2. A a = new A();
    3. @Override
    4. public void run() {
    5. Thread.currentThread().setName("副线程:");
    6. // 调用b对象的foo方法
    7. b.foo(a);
    8. }
    9. public void init() {
    10. Thread.currentThread().setName("主线程:");
    11. // 调用a对象的foo方法
    12. a.foo(b);
    13. }

    }

    class A{

    1. /**
    2. *
    3. * @param b
    4. */
    5. public synchronized void foo(B b) {
    6. System.out.println("当前线程名称:" + Thread.currentThread().getName() + "试图调用B.foo方法!");
    7. b.last();
    8. System.out.println(Thread.currentThread().getName()+ "结束!");
    9. }
    10. public synchronized void last() {
    11. System.out.println(Thread.currentThread().getName() + "调用了A类last方法!");
    12. }

    }

    class B{

    1. public synchronized void foo(A a) {
    2. System.out.println("当前线程名称:" + Thread.currentThread().getName() + "试图调用B.foo方法!");
    3. a.last();
    4. System.out.println(Thread.currentThread().getName()+ "结束!");
    5. }
    6. public synchronized void last() {
    7. System.out.println(Thread.currentThread().getName() + "调用了B类last方法!");
    8. }

    }

    ```