当前位置: 首页 > 知识库问答 >
问题:

ConcurrentHashMap JDK1.7中的“Scan andLockForPut”

何松
2023-03-14
private HashEntry<K,V> scanAndLockForPut(K key, int hash, V value) {
HashEntry<K,V> first = entryForHash(this, hash);
HashEntry<K,V> e = first;
HashEntry<K,V> node = null;
int retries = -1; // negative while locating node
while (!tryLock()) {
    HashEntry<K,V> f; // to recheck first below
    if (retries < 0) {
        if (e == null) {
            if (node == null) // speculatively create node
                node = new HashEntry<K,V>(hash, key, value, null);
            retries = 0;
        }
        else if (key.equals(e.key))
            retries = 0;
        else
            e = e.next;
    }
    else if (++retries > MAX_SCAN_RETRIES) {
        lock();
        break;
    }
    else if ((retries & 1) == 0 &&
             (f = entryForHash(this, hash)) != first) {
        e = first = f; // re-traverse if entry changed
        retries = -1;
    }
}
return node;

共有1个答案

叶华皓
2023-03-14

具体来说,“未筛选”是指什么?

在这种情况下,“筛选”意味着在调用Equals之前检查身份。以下语句的左侧也取自CHM:

if ((k = e.key) == key || (e.hash == hash && key.equals(k)))

因此,“未筛查”意味着跳过身份检查。

 类似资料:
  • 我使用子JPanel构造JScrollPane,然后尝试将JScrollPane添加到父JPanel中,希望有一个可滚动的自定义JPanel。 我有一个大的细白线前面的所有我的组件,他们是没有滚动。有什么想法吗?

  • 我已经为android Studio创建了一个webview应用程序。但没有加载web URL。错误为NET::ERR_ACCESS_DENIED。有谁能帮忙吗

  • 我有一个使用Java Version8的Spring和Maven的项目。当我运行maven update时,它适用于Java9或更高版本,当我编译它时,它适用于Java8。我注意到了这一点,因为用Maven更新会将一个特定的类更改为Java9,而我无法导入这个类。 这个类是:javax.annotation.generated(Java8)。 这是要导入的类。但是,当我进行maven更新时,文件的

  • 当应用程序启动EncryptionBootstrapConfiguration无法自动装配我的自定义TextEncryptor-https://github.com/spring-cloud/spring-cloud-commons/blob/cde7c7f3118382490c28776f66e0a56f248141fd/spring-cloud-context/src/main/java/or

  • 我有一个问题,找出我的源代码中的错误。 有什么办法可以解决它吗? 我的代码中抛出了“ArrayIndexOutOfBoundsException”,但我无法找到它的位置。 android studio中的logcat:

  • RISC-V 与中断相关的寄存器和指令 [info] 回顾:RISC-V 中的机器态(Machine Mode,机器模式,M 模式) 是 RISC-V 中的最高权限模式,一些底层操作的指令只能由机器态进行使用。 是所有标准 RISC-V 处理器都必须实现的模式。 默认所有中断实际上是交给机器态处理的,但是为了实现更多功能,机器态会将某些中断交由内核态处理。这些异常也正是我们编写操作系统所需要实现的

  • 加载EGL入口点时出错。 Java运行时环境检测到一个致命错误: exception_access_visultion(0xC0000005)在pc=0x000000000000,pid=22096,tid=21896 这是错误日志文件中的线程(完整文件太长):------------------------------------------------- 非常感谢你的回答。埃吉尔

  • java.lang.ClassCastException:com.kk.tutorial.domain.dtos.employeedTo类不能强制转换为com.kk.tutorial.domain.dtos.employeedTo类(com.kk.tutorial.domain.dtos.employeedTo位于加载器'app'的未命名模块中;com.kk.tutorial.domain.dto