前言
锁是个非常有用的工具,运用的场景非常多,因为它使用起来非常简单,易于理解,但在一些情况下会引发死锁,一旦死锁,就会造成系统功能不可用。
一旦出现死锁,业务是可感知的,因为不能继续提供服务了,那么只能通过dump线程查看到底是哪个线程出现了问题
![](https://img.haomeiwen.com/i15457865/63ceea5f924c26ac.png)
避免
1 避免一个线程同时获取多个锁
2 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源
3 尝试使用定向锁,使用lock.tryLock(timeout)来代替使用内部锁机制
4 对于数据库锁,加锁和解锁必须在一个数据库链接里,否则会出现解锁失败的情况
网友评论