多线程锁-死锁案例和排查命令

本文介绍了多线程中死锁的概念,包括产生死锁的原因,如资源不足、运行顺序不合适和资源分配不当。通过示例代码展示了死锁情况,并详细阐述了如何使用命令行工具(jps、jstack)和图形化工具(jconsole)进行死锁排查,强调在面试中可能被问及的排查方法。
摘要由CSDN通过智能技术生成

3.5 死锁及排查

3.5.1 概念

死锁是指两个或两个以上的线程在执行过程中,因抢夺资源而造成的一种互相等待的现象,若无外

力干涉,则它们无法再继续推进下去。

产生原因:

  • 系统资源不足
  • 进程运行推进顺序不合适
  • 系统资源分配不当

3.5.2 写一个死锁代码case 

package com.nanjing.gulimall.zhouyimo.test;

import java.util.concurrent.TimeUnit;

/**
 * @author zhou
 * @version 1.0
 * @date 2023/10/12 9:30 下午
 */
public class DeadLockDemo {

    public static void main(String[] args) {
        final Object a = new Object();
        final Object b = new Object();

        new Thread(() -> {
            synchronized (a){
                System.out.println("t1线程持有a锁,试图获取b锁");
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (b){
                    System.out.println("t1线程获取到b锁");
                }
            }
        },"t1").start();

        new Thread(() -> {
            synchronized (b){
                System.out.println("t2线程持有a锁,试图获取a锁");
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (a){
                    System.out.println("t2线程获取到a锁");
                }
            }
        },"t2").start();
    }
}

3.5.3 如何排查死锁

纯命令:

jps -l 

jstack 进程编号

图形化:

jconsole

如何排查死锁?注意,面试问过

方法一:

方法二: 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值