package Juc;
import java.util.concurrent.TimeUnit;
/**
* 手写死锁
* 死锁:是指俩个或者俩个以上的进程再执行过程中,
* 因争夺资源而造成的一种互相等待的现象,
* 若无外力干涉那它们都将无法推进下去
*/
class HoldLockThread implements Runnable{
private String lockA;
private String lockB;
public HoldLockThread(String lockA, String lockB) {
super();
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(3);}catch (Exception e){e.printStackTrace();}
synchronized(lockB){
System.out.println(Thread.currentThread().getName()+"\t 自己持有"+lockB+"尝试持有"+lockA);
}
}
}
}
public class DealLock {
//jps -l查看是那个进程的问题,使用jstack {进程号}
public static void main(String[] args) {
String lockA="lockA";
String lockB="lockB";
new Thread(new HoldLockThread(lockA, lockB),"ThreadAAA").start();
new Thread(new HoldLockThread(lockB, lockA),"ThreadBBB").start();
}
}
死锁-查错的方法
最新推荐文章于 2024-04-18 18:13:01 发布