我的CHM已包含以下数据 - >
1 Apple
2香蕉
3猫
4只狗
1,2,3,4是键,Apple,banana ......相应的键。
如果3个线程t1,t2,t3想要修改相同的现有记录[3 Cat]。我需要按FIFO顺序写入。[然后将执行一些操作。 Ex记录保留值变化模式的记录] 我检查了现有的源代码,它不保证FIFO写入。在源代码中,锁定在段上执行。以下是CHM Class
中的源代码 static final class Segment<K,V> extends ReentrantLock implements Serializable {
Segment(float lf, int threshold, HashEntry<K,V>[] tab) {
this.loadFactor = lf;
this.threshold = threshold;
this.table = tab;
}
// .... Rest of Code
}
Segment Class调用ReentrantLock的Default构造函数,该构造函数不提供公平锁定机制。
public ReentrantLock() {
sync = new NonfairSync();
}
如果我编写新的CHM课程并进行以下更改
Segment(float lf, int threshold, HashEntry<K,V>[] tab) {
super(true);
this.loadFactor = lf;
this.threshold = threshold;
this.table = tab;
}
super(true)将调用ReEntrantLock的以下构造函数
public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}
我认为它会使段锁定操作公平和写操作将以FIFO顺序执行。请建议你的意见。