死锁:
- 不同线程分别占用对方需要的同步资源不放弃 都在等待对方放弃自己需要的线程资源 就形成了死锁
- 出现死锁后 不会出现异常 不会出现提示 只是所有线程都处于阻塞状态 无法继续
如何处理死锁
- 专门的算法、原创
- 尽量减少同步资源的定义
- 尽量避免嵌套同步
```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();
@Override
public 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方法!");
}
}
```