标签:依赖 并且 阻塞 使用率 互斥 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