Java中的同步集合与并发集合有什么区别?
同步集合與并發(fā)集合都為多線程和并發(fā)提供了合適的線程安全的集合,不過并發(fā)集合的可擴(kuò)展性更高。
在Java1.5之前程序員們只有同步集合來用且在多線程并發(fā)的時(shí)候會(huì)導(dǎo)致爭(zhēng)用,阻礙了系統(tǒng)的擴(kuò)展性。Java5介紹了并發(fā)集合像ConcurrentHashMap,不僅提供線程安全還用鎖分離和內(nèi)部分區(qū)等現(xiàn)代技術(shù)提高了可擴(kuò)展性。
不管是同步集合還是并發(fā)集合他們都支持線程安全,他們之間主要的區(qū)別體現(xiàn)在性能和可擴(kuò)展性,還有他們?nèi)绾螌?shí)現(xiàn)的線程安全上。
同步HashMap, Hashtable, HashSet, Vector, ArrayList 相比他們并發(fā)的實(shí)現(xiàn)(ConcurrentHashMap, CopyOnWriteArrayList, CopyOnWriteHashSet)會(huì)慢得多。造成如此慢的主要原因是鎖, 同步集合會(huì)把整個(gè)Map或List鎖起來,而并發(fā)集合不會(huì)。并發(fā)集合實(shí)現(xiàn)線程安全是通過使用先進(jìn)的和成熟的技術(shù)像鎖剝離。
比如ConcurrentHashMap 會(huì)把整個(gè)Map 劃分成幾個(gè)片段,只對(duì)相關(guān)的幾個(gè)片段上鎖,同時(shí)允許多線程訪問其他未上鎖的片段。
同樣的,CopyOnWriteArrayList 允許多個(gè)線程以非同步的方式讀,當(dāng)有線程寫的時(shí)候它會(huì)將整個(gè)List復(fù)制一個(gè)副本給它。
如果在讀多寫少這種對(duì)并發(fā)集合有利的條件下使用并發(fā)集合,這會(huì)比使用同步集合更具有可伸縮性。
總結(jié)
以上是生活随笔為你收集整理的Java中的同步集合与并发集合有什么区别?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用final关键字修饰一个变量时,是引
- 下一篇: Java中活锁和死锁有什么区别?