我们遇到了一个奇怪的问题ConcurrentHashMap
,两个线程似乎在调用put()
,然后在方法中永远等待Unsafe.park()
。从外面看,里面好像是个僵局ConcurrentHashMap
。
到目前为止,我们只见过这种情况发生一次。
谁能想到可能导致这些症状的任何事情?
编辑:相关线程的线程转储在这里:
“[编辑] 线程 2”prio=10 tid=0x000000005bbbc800 nid=0x921 等待条件 [0x0000000040e93000] java.lang.Thread.State:等待(停车) 在 sun.misc.Unsafe.park(本机方法) - 停车等待 <0x00002aaaf1207b40> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) 在 java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) 在 java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747) 在 java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778) 在 java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1114) 在 java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186) 在 java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262) 在 java.util.concurrent.ConcurrentHashMap$Segment.put(ConcurrentHashMap.java:417) 在 java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:883) 在[编辑] “[编辑] 线程 0”prio=10 tid=0x000000005bf38000 nid=0x91f 等待条件 [0x000000004151d000] java.lang.Thread.State:等待(停车) 在 sun.misc.Unsafe.park(本机方法) - 停车等待 <0x00002aaaf1207b40> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) 在 java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) 在 java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747) 在 java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778) 在 java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1114) 在 java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:186) 在 java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262) 在 java.util.concurrent.ConcurrentHashMap$Segment.put(ConcurrentHashMap.java:417) 在 java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:883) 在[编辑]