相关疑难解决方法(0)

ConcurrentHashMap是否可能"死锁"?

我们遇到了一个奇怪的问题ConcurrentHashMap,其中两个线程似乎在调用put(),然后在方法内永远等待Unsafe.park().从外面看,它看起来像是一个僵局ConcurrentHashMap.

到目前为止,我们只看到过这种情况.

谁能想到任何可能导致这些症状的事情?

编辑:相关线程的线程转储在这里:


"[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 concurrency concurrenthashmap

23
推荐指数
2
解决办法
8844
查看次数

引用何时需要是原子的?

在Java中以原子方式分配引用意味着什么?

  • 我明白这对于long和double意味着什么,即:一个线程可以看到部分构造的数字,
  • 但对于一个我不理解的对象,因为赋值并不意味着复制只是指向内存中的地址

那么,如果引用赋值在Java中不是原子的,那会是什么错误?

java multithreading

9
推荐指数
3
解决办法
1785
查看次数