本節(jié)以及接下來的幾節(jié),我們探討Java并發(fā)包中的容器類。本節(jié)先介紹兩個簡單的類CopyOnWriteArrayList和CopyOnWriteArraySet,討論它們的用法和實現(xiàn)原理。它們的用法比較簡單,我們需要理解的是它們的實現(xiàn)機制,Copy-On-Write,即寫時拷貝或?qū)憰r復(fù)制,這是解決并發(fā)問題的一種重要思路。

CopyOnWriteArrayList

基本用法

CopyOnWriteArrayList實現(xiàn)了List接口,它的用法與其他List如ArrayList基本是一樣的,它的區(qū)別是:

  • 它是線程安全的,可以被多個線程并發(fā)訪問

  • 它的迭代器不支持修改操作,但也不會拋出ConcurrentModificationException

  • 它以原子方式支持一些復(fù)合操作

我們在66節(jié)提到過基于synchronized的同步容器的幾個問題。迭代時,需要對整個列表對象加鎖,否則會拋出ConcurrentModificationException,CopyOnWriteArrayList沒有這個問題,迭代時不需要加鎖。在

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式