java 死锁演示_Java DeadLock 演示与排查

什么是死锁

死锁是指两个或者两个以上的线程在执行过程中,因为争夺资源而造成的一种相互等待的现象,若无外力干涉,那它们都将无法推进下去。

c943a896788e

DeadLock

代码举例

public class DeadLockDemo {

public static void main(String[] args) {

String la = "lock-a";

String lb = "lock-b";

new Thread(new HoldLock(la, lb), "T-A").start();

new Thread(new HoldLock(lb, la), "T-B").start();

}

}

class HoldLock implements Runnable {

private String lockA;

private String lockB;

public HoldLock(String lockA, String lockB) {

this.lockA = lockA;

this.lockB = lockB;

}

@Override

public void run() {

synchronized (lockA) {

System.out.println(Thread.currentThread().getName() + " >> 持有锁: " + lockA + " 尝试获取: " + lockB);

try {

Thread.sleep(2000l);

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (lockB) {

System.out.println(Thread.currentThread().getName() + " -- 持有锁: " + lockB + " 尝试获取: " + lockA);

}

}

}

}

c943a896788e

进程卡死

死锁排查

获取怀疑产生死锁的进程id

使用jps命令获取

c943a896788e

jps

使用ps命令获取

c943a896788e

ps

打印死锁堆栈信息

使用jdk自带的jstack命令获取堆栈信息

jstack 6911

c943a896788e

jstack

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值