Chúng tôi đã gặp một vấn đề lạ với ConcurrentHashMap
, trong đó hai chủ đề dường như đang gọi put()
và sau đó chờ đợi mãi mãi bên trong phương thức Unsafe.park()
. Từ bên ngoài, nó trông giống như một bế tắc bên trong ConcurrentHashMap
.Có thể dùng ConcurrentHashMap để "bế tắc" không?
Chúng tôi chỉ thấy điều này xảy ra một lần cho đến thời điểm này.
Có ai có thể nghĩ ra bất cứ điều gì có thể gây ra các triệu chứng này không?
EDIT: Sợi chỉ đổ cho các chủ đề có liên quan là ở đây:
"[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]
Bạn có kết xuất chuỗi không? –
@ John W .: điểm tốt. Tôi sẽ đăng nó ngay sau khi tôi có thể lấy nó ra khỏi máy chủ. –
Có phần nào khác của kết xuất chuỗi chỉ ra chuỗi nào thực sự sở hữu khóa không? Những sợi chỉ đơn giản là chờ đợi để có được. Tìm hiểu những gì họ đang chờ đợi có thể giúp đỡ. –