版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java并發(fā)體系演講人2021-12-04Java并發(fā)體系演講人2021-12-0401.02.03.04.目錄并發(fā)特性并發(fā)工具Java內(nèi)存模型(JMM)多線(xiàn)程01.02.03.04.目錄并發(fā)特性并發(fā)工具Java內(nèi)存模型并發(fā)特性01并發(fā)特性01并發(fā)特性原子性:一個(gè)或多個(gè)操作,必須全部執(zhí)行成功01有序性:禁止代碼指令重排序,按照代碼順序執(zhí)行02可見(jiàn)性:多線(xiàn)程間變量修改可見(jiàn)03并發(fā)特性原子性:一個(gè)或多個(gè)操作,必須全部執(zhí)行成功01有序性:并發(fā)工具02并發(fā)工具02并發(fā)工具ABCD鎖和工具線(xiàn)程池并發(fā)集合atomic并發(fā)工具ABCD鎖和工具線(xiàn)程池并發(fā)集合atomic并發(fā)工具鎖和工具AAQSBReentra
2、ntLockC讀寫(xiě)鎖DsemaphoreECountdownLatchFCyclicBarrier并發(fā)工具鎖和工具AAQSBReentrantLockC讀寫(xiě)鎖鎖和工具Exchanger并發(fā)工具鎖和工具Exchanger并發(fā)工具AQS原理 數(shù)據(jù)結(jié)構(gòu) CLH節(jié)點(diǎn)增加和移出 優(yōu)點(diǎn)解決了子類(lèi)實(shí)現(xiàn)同步器的大量細(xì)節(jié)問(wèn)題,如獲取同步狀態(tài)、FIFO同步隊(duì)列采用模板模式,AQS實(shí)現(xiàn)大量通用方法,子類(lèi)通過(guò)繼承方式實(shí)現(xiàn)其抽象方法來(lái)管理同步狀態(tài)支持獨(dú)占式和共享式同步狀態(tài)的獲取與釋放當(dāng)有線(xiàn)程獲取鎖了,其他在此獲取時(shí)需要阻塞,當(dāng)線(xiàn)程釋放鎖后,AQS負(fù)責(zé)喚醒線(xiàn)程支持多個(gè)條件變量,支持等待喚醒機(jī)制AQS原理Reentrant
3、Lock可重入鎖,遞歸無(wú)阻塞的同步機(jī)制01比synchronized更強(qiáng)大、靈活的鎖機(jī)制,可減少死鎖發(fā)生的概率02分公平鎖和非公平鎖03底層采用AQS實(shí)現(xiàn),通過(guò)內(nèi)部Sync集成AQS04ReentrantLock可重入鎖,遞歸無(wú)阻塞的同步機(jī)制01ReentrantReadWriteLock讀鎖(共享鎖)、寫(xiě)鎖(排他鎖)支持公平、非公平性,可重入和鎖降級(jí)鎖降級(jí):遵循獲取寫(xiě)鎖、獲取讀鎖在釋放寫(xiě)鎖的次序,寫(xiě)鎖能降級(jí)為讀鎖StampedLock樂(lè)觀鎖,讀寫(xiě)時(shí)配合戳一起使用讀寫(xiě)鎖ReentrantReadWriteLock讀寫(xiě)鎖semaphore信號(hào)量,現(xiàn)在同事訪(fǎng)問(wèn)共享資源的線(xiàn)程數(shù)semaphore信號(hào)
4、量,現(xiàn)在同事訪(fǎng)問(wèn)共享資源的線(xiàn)程數(shù)CountdownLatch倒計(jì)時(shí)鎖,允許一個(gè)或多個(gè)線(xiàn)程等待其他線(xiàn)程完成操作CountdownLatch倒計(jì)時(shí)鎖,允許一個(gè)或多個(gè)線(xiàn)程等待CyclicBarrier循環(huán)柵欄,可循環(huán)使用的同步線(xiàn)程屏障CyclicBarrier循環(huán)柵欄,可循環(huán)使用的同步線(xiàn)程屏障Exchanger線(xiàn)程協(xié)作工具,在這個(gè)同步點(diǎn),兩個(gè)線(xiàn)程交換數(shù)據(jù)Exchanger線(xiàn)程協(xié)作工具,在這個(gè)同步點(diǎn),兩個(gè)線(xiàn)程交換數(shù)并發(fā)工具線(xiàn)程池優(yōu)勢(shì)01Executor03線(xiàn)程池的選擇02Future04并發(fā)工具線(xiàn)程池優(yōu)勢(shì)01Executor03線(xiàn)程池的選擇02F優(yōu)勢(shì)降低資源消耗1提高響應(yīng)速度2提高線(xiàn)程可管理性3提供延
5、時(shí)定時(shí)線(xiàn)程池 4優(yōu)勢(shì)降低資源消耗1提高響應(yīng)速度2提高線(xiàn)程可管理性3提供延時(shí)定線(xiàn)程池的選擇01020304CPU密集型任務(wù),可選擇盡量少的線(xiàn)程數(shù),如CPU核心數(shù)+1IO密集型任務(wù),可選擇盡可能多的線(xiàn)程,如CPU核心數(shù)*2混合型任務(wù),如果執(zhí)行時(shí)間相差不大,可進(jìn)行拆分優(yōu)先級(jí)不同的任務(wù),可選擇優(yōu)先隊(duì)列PriorityBlockingQueue線(xiàn)程池的選擇01020304CPU密集型任務(wù),可選擇盡量少的ThreadPoolExecutor核心屬性01核心方法02線(xiàn)程池分類(lèi)03ThreadPoolExecutor核心屬性01核心方法02核心屬性corePoolSizemaximumPoolSizekeep
6、AliveTimeTimeUnit unitBlockingQueue workQueueThreadFactory threadFactoryRejectedExecutionHandler handlerThreadPoolExecutor核心屬性corePoolSizeThreadPoolExec核心方法exec():提交不需要返回自的任務(wù) submit():提交返回Future對(duì)象任務(wù)shutdown():線(xiàn)程池置為SHUTDOWN狀態(tài),并等待線(xiàn)程執(zhí)行interrupt()方法shutdownNow():線(xiàn)程池置為STOP狀態(tài),嘗試暫停所有任務(wù)ThreadPoolExecutor核心方
7、法exec():提交不需要返回自的任務(wù) ThreadP線(xiàn)程池分類(lèi)newCacheThreadPool()newFixedThreadPool(int n)newScheduledThreadPool(int n)newSingleThreadExecutor()ThreadPoolExecutor線(xiàn)程池分類(lèi)newCacheThreadPool()ThreaScheduledThreadPoolExecutorExecutorScheduledThreadPoolExecutorExeRunnableFuture(接口)FutureTaskFutureRunnableFuture(接口)Futu
8、reTaskFuRunnabelSchedualedFuture(接口)SchedualedFutureTaskSchedualFuture(接口)RunnabelSchedualedFuture(接口)ScFutureCompleteFutureFutureCompleteFutureFutureForkJoinTaskFutureForkJoinTask并發(fā)工具并發(fā)集合1234ConcurrentHashMapBlockingQueueConcurrentLinkedQueueCopyOnWriteArrayList并發(fā)工具并發(fā)集合1234ConcurrentHashMapBConcurr
9、entHashMapJDK 8數(shù)據(jù)結(jié)構(gòu):數(shù)組+鏈表+紅黑樹(shù)加鎖位置:鎖定每個(gè)位置的頭節(jié)點(diǎn)加入元素位置:尾部擴(kuò)容后計(jì)算下標(biāo):originalIndex或originalIndex+oldSizeJDK 7數(shù)據(jù)結(jié)構(gòu):數(shù)組加鏈表加鎖位置:鎖定Segment加入元素位置:頭部,在resize中的rehash過(guò)程中,并發(fā)環(huán)境下可能形成死鏈擴(kuò)容后計(jì)算下標(biāo):hash&newSizeConcurrentHashMapJDK 8JDK 7Java內(nèi)存模型(JMM)03Java內(nèi)存模型(JMM)03Java內(nèi)存模型(JMM)內(nèi)存模型并發(fā)方案Java內(nèi)存模型(JMM)內(nèi)存模型并發(fā)方案Java內(nèi)存模型(JMM)內(nèi)存模
10、型重排序順序一致性happens-beforeas-if-serialJava內(nèi)存模型(JMM)內(nèi)存模型重排序順序一致性happe內(nèi)存模型01重排序02順序一致性03happens-before04as-if-serial內(nèi)存模型01重排序02順序一致性03happens-befoJava內(nèi)存模型(JMM)并發(fā)方案volatile01synchronized02final域03CAS04Java內(nèi)存模型(JMM)并發(fā)方案volatile01syn作用保證內(nèi)存可見(jiàn)性禁止指令重排序保證單讀/寫(xiě)原子性(32位),符合操作不保證,如i+原理內(nèi)存屏障happens-beforevolatile作用vol
11、atilesynchronized 1Java對(duì)象頭 2monitor普通方法:鎖住當(dāng)前this對(duì)象靜態(tài)方法:鎖住當(dāng)前類(lèi)對(duì)象方法塊:鎖住指定對(duì)象3基本用法synchronized 1Java對(duì)象頭 2monitor并發(fā)方案final域CBEADfinal類(lèi)不能被子類(lèi)集成 final域不能被改變,底層有寫(xiě)屏障final可以提高性能,JVM會(huì)緩存final變量(編譯時(shí)靜態(tài)綁定)final變量可以安全的在多線(xiàn)程環(huán)境下進(jìn)行共享,而不需要額外的同步開(kāi)銷(xiāo)。使用final關(guān)鍵字,JVM會(huì)對(duì)方法、變量及類(lèi)進(jìn)行優(yōu)化。并發(fā)方案final域CBEADfinal類(lèi)不能被子類(lèi)集成 fCAS原理問(wèn)題ABA問(wèn)題開(kāi)銷(xiāo)問(wèn)題只能
12、保證一個(gè)共享變量的原子操作CAS原理多線(xiàn)程04多線(xiàn)程04多線(xiàn)程123456CPU核、進(jìn)程和線(xiàn)程CPU時(shí)間輪片機(jī)制并發(fā)和并行共享內(nèi)存與CPU緩存高并發(fā)編程的好處和問(wèn)題線(xiàn)程實(shí)現(xiàn)多線(xiàn)程123456CPU核、進(jìn)程和線(xiàn)程CPU時(shí)間輪片機(jī)制并發(fā)多線(xiàn)程鎖優(yōu)化線(xiàn)程創(chuàng)建方式線(xiàn)程分類(lèi)線(xiàn)程狀態(tài)調(diào)度方式多線(xiàn)程鎖優(yōu)化線(xiàn)程創(chuàng)建方式線(xiàn)程分類(lèi)線(xiàn)程狀態(tài)調(diào)度方式多線(xiàn)程共享內(nèi)存與CPU緩存內(nèi)存一致性MESI協(xié)議多線(xiàn)程共享內(nèi)存與CPU緩存內(nèi)存一致性MESI協(xié)議多線(xiàn)程線(xiàn)程實(shí)現(xiàn)阻塞同步01非阻塞同步02無(wú)同步方案03多線(xiàn)程線(xiàn)程實(shí)現(xiàn)阻塞同步01非阻塞同步02無(wú)同步方案03阻塞同步臨界區(qū)阻塞同步臨界區(qū)阻塞同步鎖A可重入鎖B公平鎖/非公平鎖C
13、獨(dú)享鎖/共享鎖D互斥鎖/讀寫(xiě)鎖E樂(lè)觀鎖/悲觀鎖F自旋鎖阻塞同步鎖A可重入鎖B公平鎖/非公平鎖C獨(dú)享鎖/共享鎖D互斥鎖偏向鎖/輕量級(jí)鎖/重量級(jí)鎖阻塞同步鎖偏向鎖/輕量級(jí)鎖/重量級(jí)鎖阻塞同步鎖帶來(lái)的問(wèn)題死鎖互斥使用占有且等待不可搶占循環(huán)等待活鎖 饑餓 鎖帶來(lái)的問(wèn)題死鎖互斥使用活鎖 饑餓 多線(xiàn)程線(xiàn)程分類(lèi)內(nèi)核線(xiàn)程01用戶(hù)線(xiàn)程02守護(hù)線(xiàn)程03多線(xiàn)程線(xiàn)程分類(lèi)內(nèi)核線(xiàn)程01用戶(hù)線(xiàn)程02守護(hù)線(xiàn)程03多線(xiàn)程線(xiàn)程狀態(tài)新建可運(yùn)行無(wú)期限等待期限等待阻塞結(jié)束多線(xiàn)程線(xiàn)程狀態(tài)新建可運(yùn)行無(wú)期限等待期限等待阻塞結(jié)束無(wú)期限等待LockSuport.park()方法無(wú)Timeout參數(shù)的Thread.join()方法無(wú)Timeout參數(shù)的wait()方法無(wú)期限等待LockSuport.park()方法無(wú)Timeo期限等待1sleep()方法2有Timeout參數(shù)的wait()方法3有Timeout參數(shù)的Thread.join()方法4LockSuport.parkNanos()方法5LockSuport.parkUntil()方法期限等待1sleep()方法
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓(xùn)公司現(xiàn)場(chǎng)管理制度
- 山東省應(yīng)急培訓(xùn)管理制度
- 職業(yè)培訓(xùn)機(jī)構(gòu)補(bǔ)貼制度
- 舞蹈培訓(xùn)繳費(fèi)管理制度
- 學(xué)校培訓(xùn)教育制度匯編
- 內(nèi)鏡室繼續(xù)教育培訓(xùn)制度
- 專(zhuān)業(yè)技術(shù)外派培訓(xùn)制度
- 幼兒教師發(fā)展培訓(xùn)制度
- 透析室感染知識(shí)培訓(xùn)制度
- 危運(yùn)資格證培訓(xùn)制度
- 反制無(wú)人機(jī)課件
- 光伏項(xiàng)目后期運(yùn)營(yíng)維護(hù)管理方案
- 材料作文(原卷版)-2026年中考語(yǔ)文復(fù)習(xí)試題(浙江專(zhuān)用)
- 安寧療護(hù)實(shí)踐指南(2025年版)解讀課件
- 衰老標(biāo)志物人工智能數(shù)據(jù)模型建立應(yīng)用指南
- 2025至2030中國(guó)球囊膽管導(dǎo)管行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 生物樣本資源庫(kù)建設(shè)計(jì)劃及管理工作方案
- 消防安全管理人責(zé)任書(shū)范文
- 光伏電站安全事故案例
- 2025年山東省濟(jì)寧市中考道德與法治試卷(含答案)
- 重癥肺炎患者護(hù)理要點(diǎn)回顧查房
評(píng)論
0/150
提交評(píng)論