自学内容网 自学内容网

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 一把锁


原文地址:https://blog.csdn.net/qq_30500575/article/details/145246035

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!