




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Concurrent In Java2011-3-延昭&陳汝烽Concurrent In Javaconcurrentl 供的集合=ConcurrentHashMapBlockingQueue_SynchronousQueueExchangerCopyOnWriteArrayOopyQnWHteArraySet_TimeUnit2._ThreadPoolExecutorServceL.ThreadPoolExecutor_ScheduledExecutorService_Executors_ExecutorCompletionService3._java.util.concurrent.loc
2、ks3.1_Lock_&_ReentrantLock3.2_ReadWriteLock_&_ReentrantReadWriteLock4.同步輔助類4 1 CountDownlatch4 2 CyclicBarrier4 3 Semaphoreconcurr所發(fā)包,讓你易于編寫并發(fā)程序。并發(fā)下我們經(jīng)常需要使用的基礎(chǔ)設(shè)施和解決 的問題有ThreadPool、Lock、管道、集合點、線程之間等待和喚醒、線程間數(shù)據(jù)傳輸、 共享資源訪問控制、并發(fā)線程之間的相互等待,等待。concurred供的工具能夠解決絕大部分的場景,還能提高程序吞吐量。現(xiàn)代的服務器多采用多核 CPU從而不同線程之間有可能真正地在
3、同時運行而不是cpu寸間切片。在處理大計算量的程序上要盡可能利用CPU;核特性,提高系統(tǒng)吞吐量。并發(fā)編程主要面臨三個問題:1如何讓多個線程同時為同一個任務工作(并發(fā)編程設(shè)計)2多個線程之間對共享資源的爭用。3多個線程之間如何相互合作、傳遞數(shù)據(jù)concurred是供的集合concurr向直接提供了標準集合的一些實現(xiàn),在下面做簡單介紹。在大部分情況下可以使用它 們提供高并發(fā)環(huán)境下對集合訪問的吞吐量。ConcurrentHashMapMap勺一個并發(fā)實現(xiàn)。在多線程環(huán)境下,它具有很高的吞吐量和具備可靠的數(shù)據(jù)一致性。它支持 并發(fā)讀和一定程度的并發(fā)修改(默認161并發(fā),可以通過構(gòu)造函數(shù)修改)。HashMa
4、p實現(xiàn)是非線程安全的,高并發(fā)下會ge3法常會死鎖,有白時候會表現(xiàn)為CPIM高不下。public V get(Object key) if (key = null)return getForNullKey();int hash = hash(key.hashCode();for (Entry e = tableindexFor(hash, table.length);e != null;e = e.next) Object k;if (e.hash = hash & (k = e.key) = key | key.equals(k) return e.value; return null; 在g
5、e臊作里面for環(huán)取對象的操作,由于高并發(fā)同時讀寫,砧循環(huán)的結(jié)果變得不可預知,所以有可能一直循環(huán)。所以高并發(fā)環(huán)境下盡量不要直接使用HashM ap寸系統(tǒng)造成的影響很難排除。和 Collections.synchronizedMap(new HashMap(.C)oncurrentHashMa講發(fā)的環(huán)境下有著更優(yōu)秀的吞吐量。因為 ConcurrentHashMap持寫并發(fā),基本原理是內(nèi)部分段,分 段的數(shù)量決定著并發(fā)程度。通過 concurrencyLe源可以設(shè)置。如果你能預期并發(fā)數(shù)量那么設(shè) 置該參數(shù)可以獲取更優(yōu)吞吐量。另外為 ConcurrentHashMOpffi了 :putIfAbsent(
6、K key, V value);boolean remove(Object key, Object value);boolean replace(K key, V oldValue, V newValue);replace(K key, V value);這四個一致性的操作方法。1.2BlockingQueueBlockingQueue了一個接口,繼承了Queu接口。Queue一種數(shù)據(jù)結(jié)構(gòu),意思是它的項以先入先出(FIFO順序存儲。BlockingQueu我們提供了一些多線程阻塞語義的方法,新增和重定義了一些方法插入:拋出異常返回的布爾值阻塞超時插入add(e)offer(e)put(e)of
7、fer(e,time, unit) _移除remove()pol()take:)poll(timie, unit) _檢查element()pet蟲()BlockingQueu線程安全的,非常適合多個生產(chǎn)者和多個消費者線程之間傳遞數(shù)據(jù)。形象地理解,BlockingQueue有很多格子的傳輸帶系統(tǒng),不過當你(生產(chǎn)者)調(diào)用 pu昉法的 時候,如果有空閑的格子那么放入物體后立刻返回,如果沒有空閑格子那么一直處于等待狀態(tài)。ad昉法意味著如果沒有空閑格子系統(tǒng)就會報警,然后如果處理該報警則按照你的意愿。offe方法優(yōu)先于ad昉法,它通過返回tru或flaser告訴你是否放入成功。offe超時方法,如果不空
8、閑 的情況下,嘗試等待一段時間。BlockingQueue多實現(xiàn) ArrayBlockingQDelayQueLinkedBlockingDeque linkedBlockingQPeioeityBlockingQSynchronousQueue補充Dueue個雙向隊列,可以當做堆棧來使用。BlockingQueueThreadPool作為任務隊列來使用,用來保存沒有立刻執(zhí)行的工作任務對SynchronousQueueSychronousQ最iBlockingQueUe個實現(xiàn),它看起來是一個隊列,但是其實沒有容量,是特定條件下的一個精簡實現(xiàn)。做個比喻,SychronousQueue就像一個接力
9、棒,現(xiàn)在有兩個運動員交棒者和接棒者(線程) 要做交接。在交接點,交棒者沒有交出之前是不能松開的(一種等待狀態(tài)),接棒者在接到棒之 前是必須等待。換一句話說不管誰先到交接點,必須處于等待狀態(tài)。在生產(chǎn)者和消費者模型中。如果生產(chǎn)者向SychronousQ遴ue pu臊作,直到有另外的消費者線程進行tak摭作時才能返回。對消費者也是一樣,tak操作會被阻塞,直到生產(chǎn)者 put在這種生產(chǎn)者利費者模型下,生產(chǎn)者和消費者是進行手對手傳遞產(chǎn)品,在消費者消費一個產(chǎn)品之 前,生產(chǎn)者必須處于等待狀態(tài)。它給我們提供了在線程之間交換單一元素的極輕量級方法, 并且具有阻塞語義。提示:上面舉例中有寫局限性。其實生產(chǎn)者和消費
10、者進程是可以任意數(shù)量的。M N。生產(chǎn)線程之間會對SychronousQueue爭用,消費者也是一樣。對SychronousQueue于其他語境中 會合通道或 連接點問題。它非常適合于傳遞性 設(shè)計,在這種設(shè)計中,在一個線程中運行的對象要將某些信息、事件或任務傳遞給在另 個線程中運行的對象,它就必須與該對象同步。Exchanger是SychronousQueue向?qū)崿F(xiàn)。用來伙伴線程間交互對象。Exchange甫旨在比如遺傳算法和管道設(shè)計中很有用。形象地說,就是兩個人在預定的地方交互物品,任何一方?jīng)]到之前都處于等待狀態(tài)。CopyOnWriteArrayLoptyOnWriteArraySet它們分別是Lis腰口和Se腰口的實現(xiàn)。正如類名所描述的那樣,當數(shù)據(jù)結(jié)構(gòu)發(fā)生變化的時候,會 復制自身的內(nèi)容,來 保證一致性。大家都知道復制全部副本是非常昂貴的操作,看來這是一個非常不好的實現(xiàn)。事實上沒有最好和最差的方案,只有最合適的方案。一般情況下,處理多線程同步問題,我們傾向使用同步的ArrayList ,但同步也有其成本。那么在什么情況下使用 CopyOnWHteArrayLstCopyOnWriteArraySet 數(shù)據(jù)量小。 對數(shù)據(jù)結(jié)構(gòu)的修改是偶然發(fā)生的,相
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房地產(chǎn)項目增資入股投資協(xié)議
- 二零二五年度辦公室文員聘用與企業(yè)文化融合協(xié)議
- 二零二五年度新能源汽車碰撞責任免除合同
- 2025年度現(xiàn)代農(nóng)業(yè)病蟲害防治藥害賠償協(xié)議書
- 二零二五年度勞動局標準合同:養(yǎng)老服務業(yè)員工就業(yè)保障協(xié)議范本
- 2025年度賬戶變更補充服務協(xié)議
- 高性能計算中心設(shè)備采購及安裝合同
- 企業(yè)辦公室裝飾設(shè)計與施工服務合同
- 教育培訓行業(yè)線上課程開發(fā)與運營計劃書
- 電氣設(shè)備安裝工程施工合同新
- 2《中國老年糖尿病診療指南(2024年版)》解讀
- 國自科項目申報協(xié)議書模板
- 行政或后勤崗位招聘筆試題及解答(某大型國企)2025年
- 2024年北京中考地理試卷
- 四川蜀道集團筆試題
- 零食門市轉(zhuǎn)讓協(xié)議書范本
- 電氣自動化工程師考試題庫
- 小學利潤問題應用題100道附答案(完整版)
- 醫(yī)院智能化系統(tǒng)內(nèi)網(wǎng)、外網(wǎng)及設(shè)備網(wǎng)系統(tǒng)拓撲圖-可編輯課件
- 小學生心理健康主題家長會
- 社交禮儀-儀態(tài)禮儀
評論
0/150
提交評論