本節(jié)以及接下來(lái)的幾節(jié),我們探討Java并發(fā)包中的容器類。本節(jié)先介紹兩個(gè)簡(jiǎn)單的類CopyOnWriteArrayList和CopyOnWriteArraySet,討論它們的用法和實(shí)現(xiàn)原理。它們的用法比較簡(jiǎn)單,我們需要理解的是它們的實(shí)現(xiàn)機(jī)制,Copy-On-Write,即寫(xiě)時(shí)拷貝或?qū)憰r(shí)復(fù)制,這是解決并發(fā)問(wèn)題的一種重要思路。
CopyOnWriteArrayList
基本用法
CopyOnWriteArrayList實(shí)現(xiàn)了List接口,它的用法與其他List如ArrayList基本是一樣的,它的區(qū)別是:
它是線程安全的,可以被多個(gè)線程并發(fā)訪問(wèn)
它的迭代器不支持修改操作,但也不會(huì)拋出ConcurrentModificationException
它以原子方式支持一些復(fù)合操作
我們?cè)?a target="_blank" style="text-decoration: none; color: rgb(51, 153, 255);">66節(jié)提到過(guò)基于synchronized的同步容器的幾個(gè)問(wèn)題。迭代時(shí),需要對(duì)整個(gè)列表對(duì)象加鎖,否則會(huì)拋出ConcurrentModificationException,CopyOnWriteArrayList沒(méi)有這個(gè)問(wèn)題,迭代時(shí)不需要加鎖。在
網(wǎng)友評(píng)論