package threadTest;
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() + "自己持有:" + lockA + "尝试获得" + lockB);
try{
TimeUnit.SECONDS.sleep(2);
}catch (InterruptedException e){
e.printStackTrace();
}
synchronized(lockB){
System.out.println( Thread.currentThread().getName() + "自己持有:" + lockB + "尝试获得" + lockA);
}
}
}
}
public class DeadLockDemo {
public static void main(String[] args) {
String lockA = "lockA";
String lockB = "lockB";
new Thread(new HoldLockThread(lockA,lockB),"AAA").start();
new Thread(new HoldLockThread(lockB,lockA),"BBB").start();
}
}
12-30
906
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
11-28
1320
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-30