当前位置: 首页 > article >正文

Java锁 死锁及排查 JVM 工具 jconsole 工具 排查死锁

目录

概述

死锁案例 (面试)

如何排查死锁

使用 JVM 工具排查死锁

使用 jconsole 工具排查死锁

细节


概述

死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力于涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足。

死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。

死锁案例 (面试)

import java.util.concurrent.TimeUnit;

public class DeadLockDemo {

    // 展示死锁
    static  Object lockA = new Object();
    static  Object lockB = new Object();
    public static void main(String[] args) {
        new Thread(() ->{
            synchronized (lockA){
                System.out.println(Thread.currentThread().getName()+"\t"+"自己持有A锁 期待获得B锁");
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lockB){
                    System.out.println(Thread.currentThread().getName()+"\t"+"在自己持有A锁的情况下 获取了B锁");
                }
            }
        },"a").start();

        new Thread(() ->{
            synchronized (lockB){
                System.out.println(Thread.currentThread().getName()+"\t"+"自己持有A锁 期待获得B锁");
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lockA){
                    System.out.println(Thread.currentThread().getName()+"\t"+"在自己持有A锁的情况下 获取了B锁");
                }
            }
        },"b").start();
    }

}

死锁

如何排查死锁

使用 JVM 工具排查死锁

用 jps 查找进程信息

jps -l

用 jstack 追踪堆栈信息

jstack 48660

使用 jconsole 工具排查死锁

运行死锁

打开 Java 监视和管理控制台

检测死锁

细节

不可以 String 一把锁


http://www.kler.cn/a/512857.html

相关文章:

  • P8738 [蓝桥杯 2020 国 C] 天干地支
  • maven 微服务项目多 包版本问题
  • TiDB与Oracle:数据库之争,谁能更胜一筹?
  • JDBC实验测试
  • TDengine 做 Apache SuperSet 数据源
  • JavaScript语言的软件工程
  • R语言的编程范式
  • cuda从零开始手搓PB神经网络
  • QT:多窗口设计(主窗口点击按钮打开子窗口)
  • 开源的Text-to-SQL工具WrenAI
  • SQL Server2022版详细安装教程(Windows)
  • 有线通信方式(I2C、UART、RS485)
  • 【Red Hat8】:搭建FTP服务器
  • springboot接入deepseek深度求索 java
  • vue3使用音频audio标签
  • 可视化平台建设技术方案,商业BI系统解决方案,大屏建设功能需求分析(word原件)
  • Datawhale组队学习笔记task2——leetcode面试题
  • 前〈和平精英〉技术策划进军AI游戏领域,获新投资
  • 【数据结构】搜索二叉树
  • 【有啥问啥】什么是端到端(End-to-End)?
  • 【AI大模型Agent探索】深入探索实践 Qwen-Agent 的 Function Calling
  • 【Linux】Linux入门(4)其他常用指令
  • 基于Docker的Kafka分布式集群
  • leetcode——和为K的子数组(java)
  • 【配置环境】VS Code中JavaScript环境搭建
  • Ubuntu22.04系统切换内核版本