Мы столкнулись со странной проблемой с ConcurrentHashMap, когда два потока вызывают put(), а затем вечно ждут внутри метода Unsafe.park(). Внешне это выглядит как тупик внутри ConcurrentHashMap.
Мы видели такое пока только один раз.
Может ли кто-нибудь придумать что-нибудь, что могло бы вызвать эти симптомы?
РЕДАКТИРОВАТЬ: Дамп соответствующих тем находится здесь. :
"[отредактировано] Поток 2" prio=10 tid=0x000000005bbbc800 nid=0x921 ожидание по условию [0x0000000040e93000]
java.lang.Thread.State: ОЖИДАНИЕ (парковка)
в sun.misc.Unsafe.park(собственный метод)
— парковка для ожидания (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: ОЖИДАНИЕ (парковка)
at sun.misc.Unsafe.park(Native Method)
- парковка для ожидания (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)
в [отредактировано]
Подробнее здесь: https://stackoverflow.com/questions/329 ... o-deadlock