jstack发现死锁,求问一下这种死锁可能的原理?

逗泥丸的平方 2019-10-17 12:28:50


Found one Java-level deadlock:
=============================
"pool-168-thread-1":
waiting for ownable synchronizer 0x0000000798eb5dc0, (a java.util.concurrent.locks.ReentrantLock$NonfairSync),
which is held by "pool-1-thread-4"
"pool-1-thread-4":
waiting for ownable synchronizer 0x0000000798f5a9a0, (a java.util.concurrent.locks.ReentrantLock$NonfairSync),
which is held by "pool-1-thread-8"
"pool-1-thread-8":
waiting for ownable synchronizer 0x0000000798eb5dc0, (a java.util.concurrent.locks.ReentrantLock$NonfairSync),
which is held by "pool-1-thread-4"

Java stack information for the threads listed above:
===================================================
"pool-168-thread-1":
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000000798eb5dc0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(Unknown Source)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.lock(Unknown Source)
...
at java.lang.Thread.run(Unknown Source)
"pool-1-thread-4":
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000000798f5a9a0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(Unknown Source)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.lock(Unknown Source)
...
at java.lang.Thread.run(Unknown Source)
"pool-1-thread-8":
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000000798eb5dc0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(Unknown Source)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.lock(Unknown Source)
...
at java.lang.Thread.run(Unknown Source)

Found 1 deadlock.


隐去了部分业务代码的栈信息,用... 代替了

没有看到held的情况,都是parking to wait for .. 被定位了deadlock,而且是三个线程,是退出时机的问题吗?

不是太理解,求大佬指教
...全文
165 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
逗泥丸的平方 2019-10-21
  • 打赏
  • 举报
回复
引用 1 楼 ml_dark 的回复:
waiting for ownable synchronizer 0x0000000798eb5dc0,which is held by "pool-1-thread-4"
==============
代码因为没有异常释放锁,ReentrantLock对象没有unlock


后来发现了.. 有一个线程拿了两个锁.....
ml_dark 2019-10-21
  • 打赏
  • 举报
回复
waiting for ownable synchronizer 0x0000000798eb5dc0,which is held by "pool-1-thread-4" ============== 代码因为没有异常释放锁,ReentrantLock对象没有unlock

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧