Java检测死锁案例

 更新时间:2021年07月01日 10:02:54   作者:又起风了  
这篇文章主要介绍了Java检测死锁案例,本文列举了导致死锁的程序,通过使用jconsole工具进行检测等,讲述了避免死锁的方法,需要的朋友可以参考下

导致死锁的程序

package com.study.train;

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
import java.lang.reflect.Field;
import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.FutureTask;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import static java.lang.Thread.yield;

public class Main extends Thread{
    private Object o1;
    private Object o2;
    Main(Object oa,Object ob,String name) {
        super(name);
        o1 = oa;
        o2 = ob;
    }

    @Override
    public void run() {
        synchronized (o1) {
            System.out.println("thread: "+Thread.currentThread().getName() + " get lock");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (o2) {
                System.out.println("two lock is get");
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
       Object oj1 = new Object();
       Object oj2 = new Object();
       Main m1 = new Main(oj1,oj2,"thread1");
       Main m2 = new Main(oj2,oj1,"thread2");
       m1.start();
       m2.start();
       m1.join();
       m2.join();
    }
}


1.jconsole工具检测

在这里插入图片描述

2. jsp+jstack

linux上可以先使用top | grep java,查找忙的线程pid,然后拿到该线程id进行分析,jstakc pid。

在这里插入图片描述

在这里插入图片描述

避免死锁的方法

  • 1.尽量避免使用多个锁
  • 2.如果一定要使用多个锁,可以考虑顺序获取锁,这样就类似破坏了环路等待条件
  • 3.使用尝试获取锁的方法,如果无法获取,就将本身已经获取到的锁释放,类似破坏不可剥夺条件。
    银行家算法属于检测是不是会存在死锁,这种做法实际上也是破坏环路等待条件的发生。

到此这篇关于Java检测死锁案例的文章就介绍到这了,更多相关Java死锁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中闭包简单代码示例

    Java中闭包简单代码示例

    这篇文章主要介绍了Java中闭包简单代码示例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • SpringBoot访问接口自动跳转login页面的问题及解决

    SpringBoot访问接口自动跳转login页面的问题及解决

    这篇文章主要介绍了SpringBoot访问接口自动跳转login页面的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java中反射的一个简单使用

    Java中反射的一个简单使用

    一直感觉Java的反射机制很强大,JAVA反射技术在平时我们的开发中虽然很少会用到,但在我们所使用的框架源码中是经常会用到的。这篇文中就给大家介绍了关于Java中反射的一个简单使用,有需要的朋友们下面来一起看看吧。
    2016-11-11
  • Spring Boot 整合单机websocket的步骤 附github源码

    Spring Boot 整合单机websocket的步骤 附github源码

    websocket 是一个通信协议,通过单个 TCP 连接提供全双工通信,这篇文章主要介绍了Spring Boot 整合单机websocket的步骤(附github源码),需要的朋友可以参考下
    2021-10-10
  • 深入浅出讲解Java集合之Map接口

    深入浅出讲解Java集合之Map接口

    这篇文章主要介绍了深入浅出讲解Java集合之Map接口,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 基于jfreechart生成曲线、柱状等图片并展示到JSP

    基于jfreechart生成曲线、柱状等图片并展示到JSP

    这篇文章主要介绍了基于jfreechart生成曲线、柱状等图片并展示到JSP,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • JDBC 使用说明(流程、架构、编程)

    JDBC 使用说明(流程、架构、编程)

    这篇文章主要介绍了JDBC 使用说明,需要的朋友可以参考下
    2015-08-08
  • Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案

    Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案

    这篇文章主要介绍了Spring AOP之@Around,@AfterReturning使用、切不进去的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 老生常谈Java String字符串(必看篇)

    老生常谈Java String字符串(必看篇)

    下面小编就为大家带来一篇老生常谈Java String字符串(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 使用mybatis的@Interceptor实现拦截sql的方法详解

    使用mybatis的@Interceptor实现拦截sql的方法详解

    拦截器是一种基于 AOP(面向切面编程)的技术,它可以在目标对象的方法执行前后插入自定义的逻辑,本文给大家介绍了使用mybatis的@Interceptor实现拦截sql的方法,需要的朋友可以参考下
    2024-03-03

最新评论