ConcurrentHashMap 、HashTable

java集合類中非線程安全的集合能夠用同步包裝器使集合變成線程安全,好比:
HashMap --> Collections.synchronizedMap(new HashMap()),
那若是比較Collections.synchronizedMap(new HashMap())和HashTable的話,
哪一個的效率更高呢?相似的對應集合(HashMap-HashTable)還有哪些呢,每一個

的效率又如何呢? java

其實Java集合用到了不少的數據結構,用不一樣的數據結構實現的Java集合類,固然在不一樣的場合中使用有不一樣的性能表現;下面簡單說說你提到的這兩個相似的java集合類在多線程下的效率問題(通常都是時間方面): 程序員

首先 Collections.synchronizedMap(new HashMap())和HashTable 都是同步集合,Collections.synchronizedMap採用的同步塊實現,HashTable採用的是同步方法實現,在多線程環境下,通常認爲是同步塊好於同步方法
其次,說到多線程,那線程安全是很重要的,這兩個同步集合對於一些常見的簡單操做:如put, remove, get等,線程安全對於單個操做來講是沒什麼問題的,但對於一些複合操做來講,如同時put和remove,迭代等,要保證線程安全,就必須在使用時 同步加鎖 了,也就是確保像 put和remove 是一個原子操做,固然兩種Java集合類都採用hash算法實現,運行效率不會有什麼大的區別;前面說到它們都是同步集合,也就是說在多線程下併發操做時,無論是簡單的操做仍是複合操做,爲了線程安全,都是串行的操做,這樣就會大大下降程序的效率,因此呢,併發集合ConcurrentHashMap出現了,這樣即解決的併發問題,也解決了效率問題;
最後,建議你在多線程下,就用ConcurrentHashMap吧,用它來替換你說的那兩個同步集合;

魚和熊掌的問題了。
好比競標系統,系統不會太大,並且併發量也不會過高。
這時候你就不須要去考慮空間管理等問題,速度和效率是第一位的。

而若是是銀行項目,若是效率和安全二選其一,你是程序員,你怎麼選? 算法


http://blog.csdn.net/ghevinn/article/details/37764791 安全

相關文章
相關標籤/搜索