乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      死磕 java同步系列之開篇

       印度阿三17 2019-05-14

      簡介

      同步系列,這是彤哥想了好久的名字,本來是準(zhǔn)備寫鎖相關(guān)的內(nèi)容,但是java中的CountDownLatch、Semaphore、CyclicBarrier這些類又不屬于鎖,它們和鎖又有很多共同點(diǎn),都是為了協(xié)同多線程的執(zhí)行,都是一種同步器,所以這里就借用同步來取名字了,也就是“同步系列”的來源。

      概覽

      這一篇的內(nèi)容會比較多,大致包含三大主題:java中的鎖、同步器、分布式鎖,大致講的內(nèi)容如下:

      (1)volatile

      (2)synchronized

      (3)AQS及Condition

      (4)ReentrantLock

      (5)ReentrantReadWriteLock

      (6)StampedLock

      (7)CountDownLatch

      (8)Semaphore

      (9)CyclicBarrier

      (10)Phaser

      (11)Mysql實(shí)現(xiàn)分布式鎖

      (12)Redis實(shí)現(xiàn)分布式鎖

      (13)Zookeeper實(shí)現(xiàn)分布鎖

      這些內(nèi)容都比較晦澀難懂,網(wǎng)上也有比較多的資料,但往往講得不夠透徹,彤哥會盡量用通俗易懂的語言把這些問題講清楚。

      名詞解釋

      關(guān)于鎖的名詞也有很多,彤哥大致整理了下,全部列到這里:

      (1)公平鎖/非公平鎖

      公平鎖,是指按照線程申請的順序獲取鎖。

      非公平鎖,是指不是按照線程申請的順序獲取鎖,有可能后申請的線程反而先獲取到鎖,假如先來的線程一直獲取不到鎖,會造成鎖饑餓現(xiàn)象。

      ReentrantLock中可以通過構(gòu)造方法指定是否為公平鎖,默認(rèn)為非公平鎖,非公平鎖的優(yōu)點(diǎn)在于吞吐量大。

      synchronized無法指定為公平鎖,一直都是非公平鎖。

      (2)可重入鎖

      可重入鎖,是指一個(gè)線程獲取鎖之后再嘗試獲取鎖時(shí)會自動獲取鎖,可重入鎖的優(yōu)點(diǎn)是避免死鎖。

      ReentrantLock和synchronized都是可重入鎖。

      (3)獨(dú)享鎖/共享鎖

      獨(dú)享鎖,是指鎖一次只能被一個(gè)線程持有。

      共享鎖,是指鎖一次可以被多個(gè)線程持有。

      ReentrantLock和synchronized都是獨(dú)享鎖,ReadWriteLock的讀鎖是共享鎖,寫鎖是獨(dú)享鎖。

      (4)互斥鎖/讀寫鎖

      與獨(dú)享鎖/共享鎖的概念差不多,是獨(dú)享鎖/共享鎖的具體實(shí)現(xiàn)。

      ReentrantLock和synchronized都是互斥鎖

      ReadWriteLock是讀寫鎖

      (5)樂觀鎖/悲觀鎖

      悲觀鎖,是指認(rèn)為對于同一個(gè)數(shù)據(jù)的并發(fā)操作必然會發(fā)生修改,即使不會發(fā)生修改也這么認(rèn)為,所以一定要加鎖。

      樂觀鎖,是指認(rèn)為對于同一個(gè)數(shù)據(jù)的并發(fā)操作不一定會發(fā)生修改,在更新數(shù)據(jù)的時(shí)候,嘗試去更新數(shù)據(jù),如果失敗就不斷嘗試。

      悲觀鎖適用于寫操作多的場景,樂觀鎖適用于讀操作多的場景。

      (6)分段鎖

      分段鎖,是一種鎖的設(shè)計(jì)思路,它細(xì)化了鎖的粒度,主要運(yùn)用在ConcurrentHashMap中,實(shí)現(xiàn)高效的并發(fā)操作,當(dāng)操作不需要更新整個(gè)數(shù)組時(shí),就只鎖數(shù)組中的一項(xiàng)就可以了。

      (7)偏向鎖/輕量級鎖/重量級鎖

      這三個(gè)鎖主要是針對synchronized進(jìn)行優(yōu)化使用的,主要是通過對象監(jiān)視器在對象頭中的字段來表明的。

      偏向鎖,是指一段同步代碼一直被一個(gè)線程訪問,那么這個(gè)線程會自動獲取鎖,降低獲取鎖的代價(jià)。

      輕量級鎖,是指當(dāng)鎖是偏向鎖時(shí),被另一個(gè)線程所訪問,偏向鎖會升級為輕量級鎖,這個(gè)線程會通過自旋的方式嘗試獲取鎖,不會阻塞,提高性能。

      重量級鎖,是指當(dāng)鎖是輕量級鎖時(shí),當(dāng)自旋的線程自旋了一定的次數(shù)后,還沒有獲取到鎖,就會進(jìn)入阻塞狀態(tài),該鎖升級為重量級鎖,重量級鎖會使其他線程阻塞,性能降低。

      (8)自旋鎖

      自旋鎖,是指嘗試獲取鎖的線程不會阻塞,而是循環(huán)的方式不斷嘗試,這樣的好處是減少線程的上下文切換帶來的開鎖,提高性能,缺點(diǎn)是循環(huán)會消耗CPU。

      (9)監(jiān)視器鎖

      synchronized的實(shí)現(xiàn)方式,使用monitorenter和monitorexit來實(shí)現(xiàn)。

      (10)mutex鎖

      互斥鎖,LockSupport.part()底層是通過mutex實(shí)現(xiàn)的。

      彩蛋

      招募令:

      因?yàn)橥绫旧砉ぷ饕脖容^繁忙,很難做到日更,所以這里誠邀廣大好友積極投稿,大家一起學(xué)習(xí)一起進(jìn)步。

      可在公眾號后臺給我留言“投稿”,互加好友詳細(xì)討論投稿內(nèi)容。

      當(dāng)然,其它問題也可在公眾號后臺留言,不管是生活上、工作上、心理上還是身體上的,歡迎叨擾,留言必回。



      來源:http://www./content-1-189801.html

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(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ā)表

        請遵守用戶 評論公約

        類似文章 更多