Map線程安全幾種實現方法

 若是須要使 Map 線程安全,大體有這麼四種方法: 

1、使用 synchronized 關鍵字,代碼以下 java

synchronized(anObject) {    安全

    value = map.get(key); spa

}   線程

2、使用 JDK1.5提供的java.util.concurrent.locks.Lock)。代碼以下 get

lock.lock();    同步

value = map.get(key);    it

lock.unlock();   效率

3、使用 JDK1.5 提供的讀寫鎖java.util.concurrent.locks.ReadWriteLock)。代碼以下  map

rwlock.readLock().lock();    方法

value = map.get(key);   

rwlock.readLock().unlock();  

這樣兩個讀操做能夠同時進行,理論上效率會比方法 高。 
4、使用 JDK1.5 提供的 java.util.concurrent.ConcurrentHashMap 類。該類將 Map 的存儲空間分爲若干塊,每塊擁有本身的鎖,大大減小了多個線程爭奪同一個鎖的狀況。代碼以下

value = map.get(key); //同步機制內置在 get 方法中。每一個桶都有本身的鎖

比較: 

1、不一樣步確實最快,與預期一致。 
2、四種同步方式中,ConcurrentHashMap 是最快的,接近不一樣步的狀況。

三、synchronized 關鍵字很是慢,比使用鎖慢了兩個數量級。若是需本身實現同步,則使用 JDK1.5 提供的鎖機制,避免使用 synchronized 關鍵字。

相關文章
相關標籤/搜索