大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java多線程編程概述
Java多線程的安全問題
Java多線程同步
Java多線程間的通信
Java線程Lock
Java多線程管理
保障線程安全的設(shè)計(jì)技術(shù)
Java鎖的優(yōu)化及注意事項(xiàng)
Java多線程集合
【Java多線程】單例模式與多線程

Java并發(fā)集合

在JDK1.5中引入了java.util.concurrent包,在該包中定義了一組線程安全的集合,稱為并發(fā)集合, 這些集合可以作為同步集合的替代品。

非線程安全的集合 并發(fā)集合 共同接口
ArrayList CopyOnWriteArrayList List
LinkedList ConcurrentLinkedQueue Queue
HashSet CopyOnWriteArraySet Set
TreeSet ConcurrentSkipListSet SortedSet
HashMap ConcurrentHashMap Map
TreeMap ConcurrentSkipListMap SortedMap

并發(fā)集合實(shí)現(xiàn)線程安全的遍歷方式有兩種:

1、一個(gè)是對待遍歷集合的快照進(jìn)行遍歷. 快照(Snapshot)是指在創(chuàng)建iterator迭代器對象時(shí)給集合內(nèi)部的數(shù)據(jù)結(jié)構(gòu)創(chuàng)建一個(gè)副本,它反映的是在迭代這一時(shí)刻的狀態(tài),每個(gè)線程在迭代遍歷集合時(shí),都會(huì)創(chuàng)建本線程的一個(gè)副本,就相當(dāng)于這個(gè)快照是線程的特有對象,所以在遍歷操作時(shí)無須加鎖. 另外快照是只讀的,因此返回的Iterator迭代器不支持remove()刪除操作. 這種快照遍歷方式優(yōu)點(diǎn)是遍歷操作與更新操作互不影響,缺點(diǎn)是集合元素非常多時(shí),創(chuàng)建快照開銷比較大. CopyOnWriterArrayList與CopyOnWriteArraySet這兩個(gè)集合采用了快照遍歷方式。

2、另一種遍歷是準(zhǔn)實(shí)時(shí)遍歷,準(zhǔn)實(shí)際遍歷不是針對副本遍歷,也不使用鎖來保障線程安全,遍歷操作與更新可以并發(fā)進(jìn)行,這種遍歷方式支持迭代器的remove()操作的, 你刪除后可能會(huì)在其他線程遍歷時(shí)立即就反映出來ConcurrentLinkedQueue和ConcurrentHashMap等并發(fā)集合采用了這種準(zhǔn)實(shí)時(shí)遍歷方式。

并發(fā)集合內(nèi)部在保障線程安全的時(shí)候不使用鎖,采用CAS操作,或者對鎖進(jìn)行優(yōu)化,如使用粒度極小的鎖.相對于同步集合,使用并發(fā)集合的程序的吞吐率提升非常明顯,同步集合的程序隨著并發(fā)數(shù)量的增長,會(huì)使得集合內(nèi)部所使用鎖的爭用所導(dǎo)致的線程上下文切換加劇。

CopyOnWriterArrayList集合

ArrayList集合是使用比較頻繁的一個(gè)集合, 它底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,底層是通過數(shù)組來存儲(chǔ)集合中的元素,它不是線程安全的. 開發(fā)多線程程序,可以使用同步集合Vector,或者調(diào)用Collections.synchronizedList()把不是線程安全的ArrayList轉(zhuǎn)換為線程安全的。

在很多應(yīng)用場合下,讀操作可能遠(yuǎn)遠(yuǎn)大于寫操作,希望讀操作可以盡可能的快,寫操作慢一些也沒有關(guān)系.讀操作不會(huì)修改原來的數(shù)據(jù),因此每次在讀操作進(jìn)行加鎖是一種資源浪費(fèi),在同步集合Vector與Collections.synchronizedList()返回的線程安全集合中,每次在讀數(shù)據(jù)時(shí)都會(huì)進(jìn)行加鎖同步,它們讀取數(shù)據(jù)的效率就低. 根據(jù)讀寫鎖思想,讀鎖與讀鎖不沖突,讀操作會(huì)受到寫操作的阻礙,在寫操作時(shí),讀操作必須進(jìn)行等待,如果在讀操作時(shí),寫操作也需要等待。

為了將讀取的性能發(fā)揮到極致,在JDK5中引用了CopyOnWriteArrayList集合, 該集合在讀取數(shù)據(jù)時(shí)完全不用加鎖,并且寫操作也不會(huì)阻塞讀操作. 從集合類名來看CopyOnWrite就是在寫入操作時(shí),進(jìn)行一次自我復(fù)制.即當(dāng)向集合寫入數(shù)據(jù)并不修改原有的內(nèi)容, 而是把集合中原來的從容復(fù)制到一個(gè)副本中,向副本中寫入數(shù)據(jù),寫完后再將副本替換原來的數(shù)據(jù)。

CopyOnWriteArrayList集合采用快照遍歷,在迭代時(shí),不支持刪除操作。

ConcurrentLinkedQueue

ConcurrentLinkedQueue類可以看作是LinkedList類的線程安全版, 可以作為Collections.sychronizedList(LinkedList)替代品. ConcurrentLinkedQueue內(nèi)部訪問共享狀態(tài)變量(隊(duì)首與隊(duì)尾指針)時(shí)并不使用鎖,而是使用CAS操作來保障線程安全的. ConcurrentLinkedQueue是非阻塞的,避免了上下文切換需要的開銷.遍歷方式是準(zhǔn)實(shí)時(shí). 與BlockingQueue阻塞隊(duì)列比,ConcurrentLinkedQueue更適合更新操作與遍歷操作并發(fā)的情況, 有若干的線程往/從隊(duì)列中添加/刪除操作,還有若干的線程讀取集合中的數(shù)據(jù)。

BlockingQueue阻塞隊(duì)列

ConcurrentLinkedQueue是一個(gè)高效的讀寫隊(duì)列,在多線程中可以使用BlockingQueue阻塞隊(duì)列在線程之間共享數(shù)據(jù)。

BlockingQueue是一個(gè)接口,主要有兩個(gè)實(shí)現(xiàn)類ArrayBlockingQueue與LinkedBlockingQueue. ArrayBlockingQueue是基于數(shù)組實(shí)現(xiàn)的,更適合做有界隊(duì)列,在隊(duì)列中存儲(chǔ)元素的容量可以在創(chuàng)建隊(duì)列時(shí)指定; LinkedBlockingQueue基于鏈表實(shí)現(xiàn)的,適合做無界隊(duì)列,因?yàn)閮?nèi)部元素可以動(dòng)態(tài)的增加。

BlockingQueue阻塞隊(duì)列有兩個(gè)常用的操作:put()與take(). put()方法是將元素添加到隊(duì)列的尾部,如果隊(duì)列滿了,它會(huì)一直等待,直到隊(duì)列中有空閑的位置; take()會(huì)從隊(duì)列的頭部取出一個(gè)元素,如果隊(duì)列為空會(huì)一直等待,等到隊(duì)列中有可用元素再取。

ConcurrentHashMap集合

HashTable是一個(gè)同步集合,在某個(gè)線程操作HashTable期間不允許其他線程參與。

Collections.synchronizedMap(Map)可以返回一個(gè)線程安全的集合,采用了裝飾器模式,在該線程安全的集合內(nèi)部,先要獲得mutex鎖,并發(fā)效率低。

ConcurrentHashMap是一種高并發(fā)的線程安全的Map集合,可以看作是HashTable的替代品. 在JDK7前,ConcurrentHashMap內(nèi)部使用粒度極小的鎖來保障線程安全,或者說采用了分段鎖協(xié)議,默認(rèn)情況下可以支持16個(gè)線程并發(fā)操作. 在JDK8中對ConcurrentHashMap集合進(jìn)行了性能提升,采用CAS操作實(shí)現(xiàn)線程安全。

隨機(jī)數(shù)據(jù)結(jié)構(gòu):SkipList跳表

跳表是一種可以用來快速查詢的數(shù)據(jù)結(jié)構(gòu).與平衡樹相比,在對跳表插入/刪除操作時(shí),只需要對整數(shù)數(shù)據(jù)結(jié)構(gòu)的局部進(jìn)行操作即可,即在高并發(fā)的情況下, 你可能需要一個(gè)全局的鎖來保障整個(gè)平衡樹的安全,對于跳表來說,只需要部分鎖即可。

使用這一數(shù)據(jù)結(jié)構(gòu)的集合有: ConcurrentSkipListSet與ConcurrentSkipListMap集合, ConcurrentSkipListSet集合是可以對元素進(jìn)行排序的線程安全的集合, ConcurrentSkipListMap集合是可以根據(jù)鍵進(jìn)行排序的線程安全的Map集合。

全部教程
主站蜘蛛池模板: 奇米第四色网站 | 久久天天躁狠狠躁夜夜不卡 | 综合久久国产对白 | 国产日| 色综合一区二区三区 | 国产精品91视频 | 性猛交毛片 | 国产免费片 | 伊人色综合琪琪久久社区 | 国产精品一区二区综合 | 国产成+人欧美+综合在线观看 | 日日噜噜夜夜躁躁狠狠 | 中文在线免费视频 | 欧美日韩网 | 国产高清在线观看麻豆 | 精品日韩在线视频 | 福利免费在线 | 男女生性毛片免费观看 | 在线欧美v日韩v国产精品v | 欧洲精品在线观看 | 国产51自产区在线 | 深夜在线网站 | 日本大片免费一级 | 中文字幕一区婷婷久久 | 在线亚洲精品国产波多野结衣 | 亚洲国产欧美国产第一区二区三区 | 狠狠色丁香婷婷综合精品视频 | 九九99香蕉在线视频网站 | 毛片在线视频观看 | 91视频免费观看高清观看完整 | 日本大黄视频 | 久久久夜色精品国产噜噜 | 日韩一区国产二区欧美三 | 成人日韩欧美 | 久久99精品国产99久久6男男 | 精品中文字幕在线观看 | 免费一级毛片在级播放 | 免费aⅴ视频 | 精品久久精品久久 | 欧美一级高清片在线 | 国产高清区 |