久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

JUC java并發(fā)包

 補(bǔ)丁牛仔褲他哥 2020-12-29

1. JUC 簡介

在 Java 5.0 提供了java.util.concurrent(簡稱JUC)包,在此包中增加了在并發(fā)編程中很常用的工具類,

用于定義類似于線程的自定義子系統(tǒng),包括線程池,異步 IO 和輕量級任務(wù)框架;還提供了設(shè)計(jì)用于多線程上下文中

的 Collection 實(shí)現(xiàn)等;

JUC包

JUC提供的一些實(shí)現(xiàn):

    Atomic : AtomicInteger  原子操作類

    Locks : Lock, Condition, ReadWriteLock  可重入讀寫鎖

    Collections : Queue, ConcurrentMap 并發(fā)集合

    Executer : Future, Callable, Executor 線程執(zhí)行池,異步Future等

    Tools : CountDownLatch, CyclicBarrier, Semaphore 減數(shù)器,,等待器,,信號(hào)量

2.JUC 核心

java提供了synchonized關(guān)鍵字實(shí)現(xiàn)悲觀鎖機(jī)制,以求指令原子性,,內(nèi)存可見性,,操作互斥性

但是synchonized鎖機(jī)制會(huì)導(dǎo)致性能下降,控制的顆粒度也粗,所以JUC的核心理念是不通過重量級的synchonized來解決并發(fā)問題

我個(gè)人理解的JUC三大核心是 :

1.volatile 關(guān)鍵字保證內(nèi)存可見性,;

2.CAS(Compare-And-Swap) 算法 保證數(shù)據(jù)的原子性;

3.AQS隊(duì)列   (Unsafe類的park操作是調(diào)用Posix的信號(hào)量互斥量 condition,,mutex那套來實(shí)現(xiàn))

AQS的內(nèi)部隊(duì)列采用的是CLH隊(duì)列鎖模型,CLH隊(duì)列是由一個(gè)一個(gè)結(jié)點(diǎn)(Node)構(gòu)成的,。Node類中有兩個(gè)常量SHARE和EXCLUSIVE,,顧名思義這兩個(gè)常量用于表示這個(gè)結(jié)點(diǎn)支持共享模式還是獨(dú)占模式,共享模式指的是允許多個(gè)線程獲取同一個(gè)鎖而且可能獲取成功,,獨(dú)占模式指的是一個(gè)鎖如果被一個(gè)線程持有,,其他線程必須等待。多個(gè)線程讀取一個(gè)文件可以采用共享模式,,而當(dāng)有一個(gè)線程在寫文件時(shí)不會(huì)允許另一個(gè)線程寫這個(gè)文件,,這就是獨(dú)占模式的應(yīng)用場景。

找的一張AQS隊(duì)列

JUC的各種功能都是通過實(shí)現(xiàn)自定義sync類繼承AQS(AbstractQueuedSynchronizer)類,,sync有公平鎖,,非公平鎖;也可以區(qū)分為獨(dú)占sync,,共享sync,。AQS源碼一半好懂一半晦澀,比如 do{ node.prev = pred = pred.prev; }while(pred.waitStatus >0); 這一段,,我也有過空指針疑問,,還有比如,為什么要倒序喚醒等等,,所以我附上一份個(gè)人覺得比較好的AQS源碼解讀:

共享鎖:https://www.jianshu.com/p/1161d33fc1d0

獨(dú)占鎖:https://www.jianshu.com/p/71449a7d01af

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多