jconsole和Visualvm检查死锁

一. 死锁产生的条件

1.互斥:一个资源只能被一个进程使用

2.请求与保持:一个进程当因为请求资源阻塞时,对于已经获得的资源保持不放

3.不剥夺:对于进程已经获得的资源,在完成前,不能强制剥夺

4.循环等待:不同进程或者线程循环等待资源

二.jconsole检测死锁

jconsole连接进程时,点击检测死锁,若有死锁,则会生成一个死锁的Tab,打开即可看到对应的死锁线程

三.visualVM检测

连接visualVM,线程Tab中会提示检测到死锁,之后点击线程Dump查看死锁线程的详情

四.避免死锁的方式

通过避免死锁生成的后三个条件即可避免死锁。一般有如下做法

1.避免一个线程同时获取多个锁

2.尝试使用定时锁lock.tryLock(timeout)

看到博客(https://www.cnblogs.com/bopo/p/9228834.html#_label3_0)中写道,虽然知道,却还不清楚这三种方式具体应用场景,待知识继续积累再去理解

  1. 破坏“不可剥夺”条件:一个进程不能获得所需要的全部资源时便处于等待状态,等待期间他占有的资源将被隐式的释放重新加入到 系统的资源列表中,可以被其他的进程使用,而等待的进程只有重新获得自己原有的资源以及新申请的资源才可以重新启动,执行。
  2. 破坏”请求与保持条件“:第一种方法静态分配即每个进程在开始执行时就申请他所需要的全部资源。第二种是动态分配即每个进程在申请所需要的资源时他本身不占用系统资源。
  3. 破坏“循环等待”条件:采用资源有序分配其基本思想是将系统中的所有资源顺序编号,将紧缺的,稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程只有获得较小编号的进程才能申请较大编号的进程。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值