一、死锁是什么
死锁是两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象。
死锁产生的主要原因:
(1)系统资源不足
(2)进程运行推进的顺序不合适
(3)资源分配不当
二、什么情况下会产生死锁
package com.interview.javabasic.thread;
/**
* Created by luyangsiyi on 2020/3/14
*/
class HoldLockThread implements Runnable{
private String lockA;
private String lockB;
public HoldLockThread(String lockA, String lockB) {
this.lockA = lockA;
this.lockB = lockB;
}
@Override
public void run() {
synchronized (lockA){
System.out.println(Thread.currentThread().getName()+"\t自己持有:"+lockA+"\t尝试获得:"+lockB);
synchronized (lockB){
System.out.println(Thread.currentThread().getName()+"\t自己持有:"+lockB+"\t尝试获得:"+lockA);
}
}
}
}
public class DeadLockDemo {
public static void main(String[] args) {
String lockA = "lockA";
String lockB = "lockB";
new Thread(new HoldLockThread(lockA,lockB),"ThreadAAA").start();
new Thread(new HoldLockThread(lockB,lockA),"ThreadBBB").start();
}
}
三、解决方法
在当前目录下运行jps -l
找到对应程序的进程号:
然后对当前进程查看具体的信息jstack -l pid
,此时pid是14006:
找到死锁的结果。