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










网友评论