多个线程在竞争锁的过程中彼此之间形成堵塞的现象
排查
-
jstack
查看线程以及堆栈信息 -
jconsole
可视化工具,点击线程-检查死锁 -
VisualVM
强大的排查问题工具,可以查看jvm
配置、堆快照、线程堆栈信息等
避免死锁
-
修正获取锁的顺序
死锁的根本原因就是获取锁的顺序混乱,将获取锁的代码从业务逻辑中抽离,在公共的方法里获取锁 -
超时放弃
synchronized
没有获取到锁就不会放弃,但是Lock
接口提供了boolean tryLock(long time, TimeUnit unit) throws InterruptedException
的方法,可以按照固定时长等待锁
网友评论