ConcurrentHashMap中的写入顺序FIFO

时间:2013-12-18 06:03:42

标签: java java.util.concurrent fifo concurrenthashmap reentrantlock

我的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顺序执行。请建议你的意见。

0 个答案:

没有答案