這篇文章將為大家詳細(xì)講解有關(guān)ConcurrentHashMap和HashTable是什么,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
宜昌ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
java集合類中非線程安全的集合可以用同步包裝器使集合變成線程安全,比如:
HashMap --> Collections.synchronizedMap(new HashMap()),
那如果比較Collections.synchronizedMap(new HashMap())和HashTable的話,
哪個(gè)的效率更高呢?類似的對應(yīng)集合(HashMap-HashTable)還有哪些呢,每個(gè)
的效率又如何呢?
其實(shí)Java集合用到了很多的數(shù)據(jù)結(jié)構(gòu),用不同的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的Java集合類,當(dāng)然在不同的場合中使用有不同的性能表現(xiàn);下面簡單說說你提到的這兩個(gè)類似的java集合類在多線程下的效率問題(一般都是時(shí)間方面):
首先
Collections.synchronizedMap(new HashMap())和HashTable 都是同步集合,Collections.synchronizedMap采用的同步塊實(shí)現(xiàn),HashTable采用的是同步方法實(shí)現(xiàn),在多線程環(huán)境下,一般認(rèn)為是同步塊好于同步方法;
其次,說到多線程,那線程安全是很重要的,這兩個(gè)同步集合對于一些常見的簡單操作:如put, remove, get等,線程安全對于單個(gè)操作來說是沒什么問題的,但對于一些復(fù)合操作來說,如同時(shí)put和remove,迭代等,要保證線程安全,就必須在使用時(shí) 同步加鎖 了,也就是確保像 put和remove 是一個(gè)原子操作,當(dāng)然兩種Java集合類都采用hash算法實(shí)現(xiàn),運(yùn)行效率不會有什么大的區(qū)別;前面說到它們都是同步集合,也就是說在多線程下并發(fā)操作時(shí),不管是簡單的操作還是復(fù)合操作,為了線程安全,都是串行的操作,這樣就會大大降低程序的效率,所以呢,并發(fā)集合ConcurrentHashMap出現(xiàn)了,這樣即解決的并發(fā)問題,也解決了效率問題;
最后,建議你在多線程下,就用ConcurrentHashMap吧,用它來替換你說的那兩個(gè)同步集合;
魚和熊掌的問題了。
比如競標(biāo)系統(tǒng),系統(tǒng)不會太大,而且并發(fā)量也不會太高。
這時(shí)候你就不需要去考慮空間管理等問題,速度和效率是第一位的。
而如果是銀行項(xiàng)目,如果效率和安全二選其一,你是程序員,你怎么選?
關(guān)于“ConcurrentHashMap和HashTable是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。