JVM优化之使用Jstack命令查找JVM死锁

JVM优化之使用Jstack命令查找JVM死锁

示例代码

java 复制代码
public class DeadLockDemo {

    private static Object lock1 = new Object();
    private static Object lock2 = new Object();

    public static void main(String[] args) {
        new Thread(() -> {
            synchronized (lock1) {
                try {
                    System.out.println("thread1 begin");
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                }
                synchronized (lock2) {
                    System.out.println("thread1 end");
                }
            }
        }).start();

        new Thread(() -> {
            synchronized (lock2) {
                try {
                    System.out.println("thread2 begin");
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                }
                synchronized (lock1) {
                    System.out.println("thread2 end");
                }
            }
        }).start();
    }
}

使用下面的命令输出线程信息

java 复制代码
jstack <pid>

"Thread-1" 线程名

prio=5 优先级=5

tid=0x0000028ae51d6000 线程id

nid=0x8778 线程对应的本地线程标识nid

java.lang.Thread.State: BLOCKED 线程状态

通过输出结果,可以看到有一个线程死锁,Thread-0和Thread-1在进行资源的竞争,同时也输出了资源竞争代码所在行。

相关推荐
wuminyu1 小时前
虚拟线程底层ForkJoinPool的工作窃取算法机制
java·linux·c语言·jvm·c++
leisoo80971 小时前
股票数据本地化存储实战:JSON、数据库与列式存储的方案对比
jvm·数据库·json
SamChan906 小时前
PDF翻译中的并发控制:用Semaphore防止API限流与资源耗尽
java·jvm·pdf
snow@li8 小时前
Java:跨平台原理与JDK、JRE、JVM全景深度解析
java·开发语言·jvm
Livia要学习8 小时前
Python闭包
开发语言·jvm·python
行者-全栈开发1 天前
美团后端开发面试题全集(2026最新版):HashMap、JVM、MySQL、Redis高频考点深度解析
jvm·hashmap·java面试题·后端开发·redis缓存·mysql索引·面经汇总
豆沙沙包?1 天前
C++-程序的内存模型(P84-P88)
java·jvm·c++
未秃头的程序猿1 天前
凌晨3点被叫醒:线上OOM,我用这套流程40分钟定位根因
java·jvm·后端
执笔画流年呀1 天前
JVM虚拟机
jvm
lisin-lee-cooper1 天前
JVM知识体系
java·jvm