死锁相关介绍

Posted xy80hou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了死锁相关介绍相关的知识,希望对你有一定的参考价值。

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

 

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

 

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

 

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

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

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

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

 

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

以上是关于死锁相关介绍的主要内容,如果未能解决你的问题,请参考以下文章

mysql 发生死锁问题请求帮助

Linux死锁检测-Lockdep

Java并发基础死锁

记录一次Mysql死锁排查过程

记录一次Mysql死锁排查过程

死锁相关问题