码迷,mamicode.com
首页 > 其他好文 > 详细

死锁相关介绍

时间:2019-04-23 09:26:55      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:依赖   并且   阻塞   使用率   互斥   wait   color   情况下   避免   

1、多线程中的死锁,指两个或多个线程之间,由于互相持有对方需要的锁,循环依赖导致彼此一直处于阻塞的状态。

 

2、定位死锁最常见的方式就是利用jstack等工具获取线程栈,然后定位互相之间的依赖关系,进而找到死锁。

 

3、如果程序运行时发生了死锁,绝大多数情况下都是无法在线解决的,只能重启、修正程序本身问题。

 

4、避免死锁发生的方法有:

(1)尽量避免使用多个锁,并且只有需要时才持有锁。

(2)尽量设计好锁的获取顺序,参考银行家算法

(3)使用带超时的方法,如Object.wait(...)、CountDownLatch.await(...)等,都支持所谓的timed_wait。

 

5、除了由于互斥的锁循环依赖造成的死锁,还有一种情况是某个线程进入了死循环,造成其他线程阻塞等待,这种情况会导致cpu使用率飙升,可以使用top命令查找使用率较高的java线程,进而再用jstack排查具体原因。(循环依赖造成的死锁一般cpu的使用率较低)

死锁相关介绍

标签:依赖   并且   阻塞   使用率   互斥   wait   color   情况下   避免   

原文地址:https://www.cnblogs.com/xy80hou/p/10754341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!