死锁相关介绍
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的使用率较低)
以上是关于死锁相关介绍的主要内容,如果未能解决你的问题,请参考以下文章