成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java多線程進階(一)—— J.U.C并發(fā)包概述

anonymoussf / 3033人閱讀

摘要:整個包,按照功能可以大致劃分如下鎖框架原子類框架同步器框架集合框架執(zhí)行器框架本系列將按上述順序分析,分析所基于的源碼為。后,根據(jù)一系列常見的多線程設計模式,設計了并發(fā)包,其中包下提供了一系列基礎的鎖工具,用以對等進行補充增強。

本文首發(fā)于一世流云專欄:https://segmentfault.com/blog...
J.U.C包簡介

J.U.C并發(fā)包,即java.util.concurrent包,是JDK的核心工具包,是JDK1.5之后,由 Doug Lea實現(xiàn)并引入。

整個java.util.concurrent包,按照功能可以大致劃分如下:

juc-locks 鎖框架

juc-atomic 原子類框架

juc-sync 同步器框架

juc-collections 集合框架

juc-executors 執(zhí)行器框架

本系列將按上述順序分析J.U.C,分析所基于的源碼為Oracle JDK1.8.0_111。

主要參考書籍:

《Java Concurrency in Practice》 Brian Goetz等

《JAVA多線程設計模式》 結(jié)城 浩

juc-locks 鎖框架

早期的JDK版本中,僅僅提供了synchronizd、wait、notify等等比較底層的多線程同步工具,開發(fā)人員如果需要開發(fā)復雜的多線程應用,通常需要基于JDK提供的這些基礎工具進行封裝,開發(fā)自己的工具類。JDK1.5+后,Doug Lea根據(jù)一系列常見的多線程設計模式,設計了JUC并發(fā)包,其中java.util.concurrent.locks包下提供了一系列基礎的鎖工具,用以對synchronizd、wait、notify等進行補充、增強。

java.util.concurrent.locks包的結(jié)構(gòu)如下:

包內(nèi)接口和類的簡單UML圖如下:

本部分包含以下文章:

J.U.C之locks框架(1):接口說明

J.U.C之locks框架(2):ReentrantLock 的使用

J.U.C之locks框架(3):ReentrantReadWriteLock 的使用

J.U.C之locks框架(4):LockSupport 工具類

J.U.C之locks框架(5):AbstractQueuedSynchronizer 綜述

J.U.C之locks框架(6):AbstractQueuedSynchronizer 的獨占功能原理

J.U.C之locks框架(7):Condition 原理

J.U.C之locks框架(8):AbstractQueuedSynchronizer 的共享功能原理

J.U.C之locks框架(9):ReentrantReadWriteLock 原理

J.U.C之locks框架(10):更強的讀寫鎖——StampedLock

juc-atomic 原子類框架

早期的JDK版本中,如果要并發(fā)的對Integer、Long、Double之類的Java原始類型或引用類型進行操作,一般都需要通過鎖來控制并發(fā),以防數(shù)據(jù)不一致。

從JDK1.5開始,引入了java.util.concurrent.atomic工具包,該包提供了許多Java原始/引用類型的映射類,如AtomicInteger、AtomicLongAtomicBoolean,這些類可以通過一種“無鎖算法”,線程安全的操作Integer、Long、Boolean等原始類型。

所謂“無鎖算法”,我們在講juc-locks鎖框架系列中,已經(jīng)接觸過太多次了,其實底層就是通過Unsafe類實現(xiàn)的一種比較并交換的算法,大致的結(jié)構(gòu)如下(具體入?yún)ⅲ鶕?jù)上下文有所不同):
boolean compareAndSet(expectedValue, updateValue);
當希望修改的值與expectedValue相同時,則嘗試將值更新為updateValue,更新成功返回true,否則返回false。

java.util.concurrent.atomic包結(jié)構(gòu)如下:

包內(nèi)類的簡單UML圖如下:

本部分包含以下文章:

J.U.C之a(chǎn)tomic框架(1):Unsafe類

J.U.C之a(chǎn)tomic框架(2):AtomicInteger

J.U.C之a(chǎn)tomic框架(3):AtomicReference

J.U.C之a(chǎn)tomic框架(4):Atomic數(shù)組

J.U.C之a(chǎn)tomic框架(5):AtomicXXXFieldUpdater

J.U.C之a(chǎn)tomic框架(6):更強的原子類——LongAdder

juc-sync 同步器框架

這里的juc-sync同步器框架,是指java.util.concurrent包下一些輔助同步器類,每個類都有自己適合的使用場景:

同步器名稱 作用
CountDownLatch 倒數(shù)計數(shù)器,構(gòu)造時設定計數(shù)值,當計數(shù)值歸零后,所有阻塞線程恢復執(zhí)行;其內(nèi)部實現(xiàn)了AQS框架
CyclicBarrier 循環(huán)柵欄,構(gòu)造時設定等待線程數(shù),當所有線程都到達柵欄后,柵欄放行;其內(nèi)部通過ReentrantLock和Condition實現(xiàn)同步
Semaphore 信號量,類似于“令牌”,用于控制共享資源的訪問數(shù)量;其內(nèi)部實現(xiàn)了AQS框架
Exchanger 交換器,類似于雙向柵欄,用于線程之間的配對和數(shù)據(jù)交換;其內(nèi)部根據(jù)并發(fā)情況有“單槽交換”和“多槽交換”之分
Phaser 多階段柵欄,相當于CyclicBarrier的升級版,可用于分階段任務的并發(fā)控制執(zhí)行;其內(nèi)部比較復雜,支持樹形結(jié)構(gòu),以減少并發(fā)帶來的競爭

本部分包含以下文章:

J.U.C之synchronizer框架(1):倒數(shù)計數(shù)器——CountDownLatch

J.U.C之synchronizer框架(2):循環(huán)柵欄——CyclicBarrier

J.U.C之synchronizer框架(3):信號量——Semaphore

J.U.C之synchronizer框架(4):數(shù)據(jù)交換器——Exchanger

J.U.C之synchronizer框架(5):多階段柵欄——Phaser

juc-collections 集合框架

這里的juc-collections集合框架,是指java.util.concurrent包下的一些同步集合類,按類型劃分可以分為:符號表、隊列、Set集合、列表四大類,每個類都有自己適合的使用場景,整個juc-collections集合框架的結(jié)構(gòu)如下圖:

其中阻塞隊列的分類及特性如下表:

隊列特性 有界隊列 近似無界隊列 無界隊列 特殊隊列
有鎖算法 ArrayBlockingQueue LinkedBlockingQueue、LinkedBlockingDeque / PriorityBlockingQueue、DelayQueue
無鎖算法 / / LinkedTransferQueue SynchronousQueue

本部分包含以下文章:

J.U.C之collections框架(1):ConcurrentHashMap的基本原理

J.U.C之collections框架(2):ConcurrentHashMap的擴容

J.U.C之collections框架(3):跳表——ConcurrentSkipListMap

J.U.C之collections框架(4):ConcurrentSkipListSet

J.U.C之collections框架(5):“寫時復制”的應用——CopyOnWriteArrayList

J.U.C之collections框架(6):CopyOnWriteArraySet

J.U.C之collections框架(7):無鎖隊列——ConcurrentLinkedQueue

J.U.C之collections框架(8):無鎖雙端隊列——ConcurrentLinkedDeque

J.U.C之collections框架(9):阻塞隊列簡介——BlockingQueue

J.U.C之collections框架(10):基于數(shù)組的阻塞隊列——ArrayBlockingQueue

J.U.C之collections框架(11):基于單鏈表的阻塞隊列——LinkedBlockingQueue

J.U.C之collections框架(12):基于堆的優(yōu)先級阻塞隊列——PriorityBlockingQueue

J.U.C之collections框架(13):特殊的同步隊列——SynchronousQueue

J.U.C之collections框架(14):延時阻塞隊列——DelayQueue

J.U.C之collections框架(15):基于雙鏈表的阻塞雙端隊列——LinkedBlockingDeque

J.U.C之collections框架(16):LinkedTransferQueue

juc-executors 執(zhí)行器框架

executors框架是整個J.U.C包中類/接口關系最復雜的框架,executors其實可以劃分為3大塊,每一塊的核心都是基于Executor這個接口:

線程池

Future模式

Fork/Join框架

本部分包含以下文章:

J.U.C之executors框架(1):executors框架概述
J.U.C之executors框架(2):普通線程池——ThreadPoolExecutor
J.U.C之executors框架(3):計劃線程池——ScheduledThreadPoolExecutor
J.U.C之executors框架(4):Future 模式
J.U.C之executors框架(5):Fork/Join 框架的原理
J.U.C之executors框架(6):Fork/Join 框架的實現(xiàn)

后續(xù)文章將從juc-locks鎖框架開始,循序漸進得介紹各個框架中得多線程工具的使用方法和原理。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71505.html

相關文章

  • Java線程進階(三九)—— J.U.C之executors框架:executors框架概述

    摘要:注意線程與本地操作系統(tǒng)的線程是一一映射的。固定線程數(shù)的線程池提供了兩種創(chuàng)建具有固定線程數(shù)的的方法,固定線程池在初始化時確定其中的線程總數(shù),運行過程中會始終維持線程數(shù)量不變。 showImg(https://segmentfault.com/img/bVbhK58?w=1920&h=1080); 本文首發(fā)于一世流云專欄:https://segmentfault.com/blog... ...

    wdzgege 評論0 收藏0
  • Java線程進階(八)—— J.U.C之locks框架:AQS的Conditon等待(3)

    摘要:關于接口的介紹,可以參見多線程進階二鎖框架接口。最終線程釋放了鎖,并進入阻塞狀態(tài)。當線程被通知喚醒時,則是將條件隊列中的結(jié)點轉(zhuǎn)換成等待隊列中的結(jié)點,之后的處理就和獨占功能完全一樣。 showImg(https://segmentfault.com/img/remote/1460000016012490); 本文首發(fā)于一世流云的專欄:https://segmentfault.com/bl...

    ityouknow 評論0 收藏0
  • Java線程進階(九)—— J.U.C之locks框架:AQS共享功能剖析(4)

    摘要:好了,繼續(xù)向下執(zhí)行,嘗試獲取鎖失敗后,會調(diào)用首先通過方法,將包裝成共享結(jié)點,插入等待隊列,插入完成后隊列結(jié)構(gòu)如下然后會進入自旋操作,先嘗試獲取一次鎖,顯然此時是獲取失敗的主線程還未調(diào)用,同步狀態(tài)還是。 showImg(https://segmentfault.com/img/remote/1460000016012541); 本文首發(fā)于一世流云的專欄:https://segmentfa...

    CompileYouth 評論0 收藏0
  • 聊聊面試中關于發(fā)問題的應對方案

    摘要:這里呢,我直接給出高并發(fā)場景通常都會考慮的一些解決思路和手段結(jié)尾如何有效的準備面試中并發(fā)類問題,我已經(jīng)給出我的理解。 showImg(https://segmentfault.com/img/bV7Viy?w=550&h=405); 主題 又到面試季了,從群里,看到許多同學分享了自己的面試題目,我也抽空在網(wǎng)上搜索了一些許多公司使用的面試題,目前校招和社招的面試題基本都集中在幾個大方向上...

    xzavier 評論0 收藏0
  • Java線程進階(十)—— J.U.C之locks框架:基于AQS的讀寫鎖(5)

    摘要:關于,最后有兩點規(guī)律需要注意當?shù)牡却犃嘘犑捉Y(jié)點是共享結(jié)點,說明當前寫鎖被占用,當寫鎖釋放時,會以傳播的方式喚醒頭結(jié)點之后緊鄰的各個共享結(jié)點。當?shù)牡却犃嘘犑捉Y(jié)點是獨占結(jié)點,說明當前讀鎖被使用,當讀鎖釋放歸零后,會喚醒隊首的獨占結(jié)點。 showImg(https://segmentfault.com/img/remote/1460000016012293); 本文首發(fā)于一世流云的專欄:...

    dunizb 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<