实现死锁的简单案例和分析是否产生死锁
Posted 程序逸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现死锁的简单案例和分析是否产生死锁相关的知识,希望对你有一定的参考价值。
代码部分:
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.可以得出当前是因为死锁问题而不是死循环问题。
以上是关于实现死锁的简单案例和分析是否产生死锁的主要内容,如果未能解决你的问题,请参考以下文章