gpt4 book ai didi

java - concurrenthashmap 中的可重入锁是否使用它的可选 “fairness” 参数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:31 41 4
gpt4 key购买 nike

在 ConcurrentHashMap 中,我们有基本上扩展了 ReentrantLock 的段。

static final class Segment<K,V> extends ReentrantLock implements Serializable

这个 ReentrantLock 是否使用它的公平属性?

public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}

假设线程 t1 在 ConcurrentHashMap 的一个分区上有读锁,另外两个线程 t2 和 t3 分别在同一个分区上等待读锁和写锁。因此,一旦 t1 释放了它的锁,哪个(t2 或 t3)将获得锁。

据我所知,如果 fairness 设置为 true,那将是等待时间最长的人。但是在concurrentHashMap的情况下是否设置为true呢?如果不是,我们能否确定哪个线程将获得下一个锁?

最佳答案

从ConcurrentHashMap源码可以看出它使用了ReentrantLock的子类

static final class Segment<K,V> extends ReentrantLock
...
Segment(float lf, int threshold, HashEntry<K,V>[] tab) {
this.loadFactor = lf;
this.threshold = threshold;
this.table = tab;
}
...

正如我们所见,它唯一的构造函数隐式调用了 ReentrantLock 的无参数构造函数,该构造函数创建了一个非公平锁。这意味着 ConcurrentHashMap 的锁总是非公平的

关于java - concurrenthashmap 中的可重入锁是否使用它的可选 “fairness” 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17540409/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com