代码部分:
package com.ctvit.sync;
import java.util.concurrent.TimeUnit;
/**
* @author ctvit
* 演示死锁
*/
public class DeadLock {
static Object a = new Object();
static Object b = new Object();
public static void main(String[] args) {
new Thread(()->{
synchronized (a){
System.out.println(Thread.currentThread().getName()+"持有锁a,试图去获取锁b");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (b){
System.out.println(Thread.currentThread().getName()+"获取锁b");
}
}
},"A").start();
new Thread(()->{
synchronized (b){
System.out.println(Thread.currentThread().getName()+"持有锁b,试图去获取锁a");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (a){
System.out.println(Thread.currentThread().getName()+"获取锁a");
}
}
},"B").start();
}
}
如何分析,使用jps命令和jstack命令
使用jps -l来查询当前类的进程id,为68900
使用jstack 68900,会发现有一条提示:Found 1 deadlock.可以得出当前是因为死锁问题而不是死循环问题。