package lock;
import java.util.concurrent.ThreadFactory;
/**
* @author Mr.Zhao
* @Description: 资源竞争类
* @date 2019/12/28 10:16
* @version 1.0
*/
class LockResource implements Runnable{
private String lockA;
private String lockB;
public LockResource(String lockA, String lockB) {
this.lockA = lockA;
this.lockB = lockB;
}
@Override
public void run() {
synchronized (lockA) {
System.out.println(Thread.currentThread().getName() + "自己持有" + lockA + "尝试获取" + lockB);
synchronized (lockB) {
System.out.println(Thread.currentThread().getName() + "自己持有" + lockB + "尝试获取" + lockA);
}
}
}
}
/**
* @author Mr.Zhao
* @version 1.0
* @Description: 手写一个死锁
* @date 2019/12/28 10:08
*/
public class DeadLock {
public static void main(String[] args) {
new Thread(new LockResource("lockA","lockB"), "ThreadAAAA").start();
new Thread(new LockResource("lockB","lockA"), "ThreadBBBB").start();
}
}

输入jps查看java进程,查找自己进程的pid

输入jstack 进程id,查看详细信息


可以看到两个线程相互等待,进入死锁
本文展示了一个使用Java实现的手写死锁示例,通过两个线程分别试图获取不同的锁来形成死锁状态,深入理解资源竞争和死锁现象。
1143

被折叠的 条评论
为什么被折叠?



