package com.itjava.interview;
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 + "\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 = "lockA";
String lockB = "lockB";
new Thread(new HoldLockThread(lockA,lockB),"ThreadAA").start();
new Thread(new HoldLockThread(lockB,lockA),"ThreadBB").start();
/**
* linux ps -ef|grep xxxx ls -l
*
* windows 下的java运行程序 也有类似的ps的查看运行命令,但是目前我们需要查看的只是java
* jps = java ps jsp -l
*/
}
}
多线程中的死锁
最新推荐文章于 2025-05-06 17:43:01 发布
本文通过一个简单的Java代码示例,深入浅出地解析了死锁现象的产生原因及表现形式。通过两个线程相互等待对方持有的锁,展示了死锁的典型场景。
5万+

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



