什么是死锁
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉则它们都无法推进下去。如果系统资源充足,进程的资源请求都能得到满足,死锁出现的可能性会降低,否则就会因为争夺有限的资源而陷入死锁。
产生原因
- 系统资源不足
- 进程运行推进的顺序不合适
- 资源分配不当
demo
import java.util.concurrent.TimeUnit;
public class DeadDemo {
public static void main(String[] args) {
Dead dead=new Dead();
new Thread(dead::A,"1").start();
new Thread(dead::B,"2").start();
}
}
class Dead{
Object a=new Object();
Object b=new Object();
public void A(){
synchronized (a){
System.out.println(Thread.currentThread().getName()+"持有a锁");
try{
TimeUnit.SECONDS.sleep(2);
}catch(InterruptedException e){
e.printStackTrace();
}
synchronized (b){
System.out.println(Thread.currentThread().getName()+"持有b锁");
}
}
}
public void B(){
synchronized (b){
System.out.println(Thread.currentThread().getName()+"持有b锁");
try{
TimeUnit.SECONDS.sleep(2);
}catch(InterruptedException e){
e.printStackTrace();
}
synchronized (a){
System.out.println(Thread.currentThread().getName()+"持有a锁");
}
}
}
}
定位分析
jps命令定位进程号
jstack查看相应进程号