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