10.1 是什么
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。
产生死锁主要原因:
- 系统资源不足
- 进程运行推进的顺序不合适
- 资源分配不当 ```java package s02.e10;
import java.util.concurrent.TimeUnit;
class HoldLockThread implements Runnable { private String lockA; private String lockB;
public HoldLockThread(String lockA, String lockB) {this.lockA = lockA;this.lockB = lockB;}@Overridepublic void run() {synchronized (lockA) {System.out.println(Thread.currentThread().getName() + "\t 自己持有:" + lockA + "\t尝试获取:" + lockB);try {TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {e.printStackTrace();}synchronized (lockB) {System.out.println(Thread.currentThread().getName() + "\t 自己持有:" + lockB + "\t尝试获取:" + lockA);}}}
}
public class DeadLockDemo { public static void main(String[] args) { String lockA = “1ockA”; String lockB = “lockB”; new Thread(new HoldLockThread(lockA, lockB), “ThreadAAA”).start(); new Thread(new HoldLockThread(lockB, lockA), “ThreadBBB”).start(); } }
<a name="dclGm"></a># 10.2 如何排查死锁1. jps 命令定位进程号```bashjps -l

- jstack 找到死锁查看
jstack [进程号]

