package com.an.learning.thread;
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;
}
@Override
public void run() {
synchronized (lockA) {
System.out.println(Thread.currentThread().getName() + "\t 自己持有" + lockA + "锁,尝试获得" + lockB);
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB) {
System.out.println(Thread.currentThread().getName() + "\t 自己持有" + lockB + "锁,尝试获得" + lockA);
}
}
}
}
/**
* @author Anzepeng
* @title: DeadLockDemo
* @projectName learning
* @description: 死锁
* @date 2020/8/19 0019下午 16:43
*/
public class DeadLockDemo {
public static void main(String[] args) {
String lockA = "A";
String lockB = "B";
new Thread(new HoldLockThread(lockA,lockB),"A").start();
new Thread(new HoldLockThread(lockB,lockA),"B").start();
}
}
使用Idea的Terminal输入命令jps -l
执行命令:jstack 9816 --- 使用jstack 端口号 查看执行信息
A持有 <0x00000000d635f928> 这个锁尝试占有<0x00000000d635f958>这个锁
B持有 <0x00000000d635f958>这个锁尝试占有<0x00000000d635f928>这个锁
互相僵持产生死锁
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有