ConcurrentHashMap是否有可能“死锁”? [英] Is it possible for ConcurrentHashMap to "deadlock"?
问题描述
我们遇到了一个奇怪的问题, ConcurrentHashMap
,其中两个线程似乎正在调用 put()
然后在方法 Unsafe.park()
中永久等待。从外部,它看起来像 ConcurrentHashMap
中的死锁。
We have come across a strange issue with ConcurrentHashMap
, where two threads appears to be calling put()
, and then waiting forever inside the method Unsafe.park()
. From the outside, it looks like a deadlock inside ConcurrentHashMap
.
我们只看到这种情况发生了一次。
We have only seen this happen once so far.
任何人都可以想到可能导致这些症状的任何事情。
Can anyone think of anything that could cause these symptoms?
EDIT 相关线程的线程转储在这里:
EDIT: The thread dump for the relevant threads is here:
"[redacted] Thread 2" prio=10 tid=0x000000005bbbc800 nid=0x921 waiting on condition [0x0000000040e93000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00002aaaf1207b40> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1114)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
at java.util.concurrent.ConcurrentHashMap$Segment.put(ConcurrentHashMap.java:417)
at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:883)
at [redacted]
"[redacted] Thread 0" prio=10 tid=0x000000005bf38000 nid=0x91f waiting on condition [0x000000004151d000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00002aaaf1207b40> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1114)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
at java.util.concurrent.ConcurrentHashMap$Segment.put(ConcurrentHashMap.java:417)
at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:883)
at [redacted]
推荐答案
也许不是你想要的答案, JVM错误。请参阅
Maybe not the answer you want, but this may be a JVM bug. See
http: //bugs.sun.com/bugdatabase/view_bug.do?bug_id=6865591
这篇关于ConcurrentHashMap是否有可能“死锁”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!