您的位置:首页 > 博客中心 > 互联网 >

死锁相关介绍

时间:2022-05-07 19:41

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

 

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

 

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

 

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

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

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

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

 

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

本类排行

今日推荐

热门手游