小编Kyn*_*iao的帖子

在这种情况下,ConcurrentHashMap是否有可能陷入僵局?

我正在阅读ConcurrentHashMapJDK8中的源代码,请注意,该代码TreeBin使用“读写”锁来防止并发读写。

如果没有并发的写线程试图修改树结构,则读线程将通过TreeNodes。当“查找”操作完成时,读取线程可能会:

(1)lockState如果存在,则“ CAS” 和“取消”服务线程。

以下是源代码中的“ find()”方法。

final Node<K,V> find(int h, Object k) {
            if (k != null) {
                for (Node<K,V> e = first; e != null; ) {
                    int s; K ek;
                    if (((s = lockState) & (WAITER|WRITER)) != 0) {
                        if (e.hash == h &&
                            ((ek = e.key) == k || (ek != null && k.equals(ek))))
                            return e;
                        e = e.next;
                    }
                    else if (U.compareAndSwapInt(this, LOCKSTATE, s,
                                                 s + READER)) {
                        TreeNode<K,V> …
Run Code Online (Sandbox Code Playgroud)

java deadlock concurrenthashmap java.util.concurrent

12
推荐指数
1
解决办法
224
查看次数