死锁:
- 不同线程分别占用对方需要的同步资源不放弃 都在等待对方放弃自己需要的线程资源 就形成了死锁
- 出现死锁后 不会出现异常 不会出现提示 只是所有线程都处于阻塞状态 无法继续
如何处理死锁
- 专门的算法、原创
- 尽量减少同步资源的定义
- 尽量避免嵌套同步
```java
/**
- 创建人:LYY
- 创建时间:2022/4/27 *
- 死锁练习 */ public class LockTest {
public static void main(String[] args) {DeadLock deadLock = new DeadLock();// 启动副线程deadLock.start();// 启动主线程deadLock.init();}
}
class DeadLock extends Thread{
B b = new B();A a = new A();@Overridepublic void run() {Thread.currentThread().setName("副线程:");// 调用b对象的foo方法b.foo(a);}public void init() {Thread.currentThread().setName("主线程:");// 调用a对象的foo方法a.foo(b);}
}
class A{
/**** @param b*/public synchronized void foo(B b) {System.out.println("当前线程名称:" + Thread.currentThread().getName() + "试图调用B.foo方法!");b.last();System.out.println(Thread.currentThread().getName()+ "结束!");}public synchronized void last() {System.out.println(Thread.currentThread().getName() + "调用了A类last方法!");}
}
class B{
public synchronized void foo(A a) {System.out.println("当前线程名称:" + Thread.currentThread().getName() + "试图调用B.foo方法!");a.last();System.out.println(Thread.currentThread().getName()+ "结束!");}public synchronized void last() {System.out.println(Thread.currentThread().getName() + "调用了B类last方法!");}
}
```
