最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java同步開(kāi)篇入門(mén)簡(jiǎn)單介紹

 更新時(shí)間:2019年05月21日 09:15:11   作者:彤哥讀源碼  
java中的CountDownLatch、Semaphore、CyclicBarrier這些類(lèi)又不屬于鎖,它們和鎖又有很多共同點(diǎn),都是為了協(xié)同多線(xiàn)程的執(zhí)行,都是一種同步器,所以這里就借用同步來(lái)取名字了,也就是“同步系列”的來(lái)源。下面小編來(lái)簡(jiǎn)單介紹下

概覽
這一篇的內(nèi)容是一個(gè)大概的介紹,大致包含三大主題: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)上也有比較多的資料,但往往講得不夠透徹,彤哥會(huì)盡量用通俗易懂的語(yǔ)言把這些問(wèn)題講清楚。

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

(1)公平鎖/非公平鎖

公平鎖,是指按照線(xiàn)程申請(qǐng)的順序獲取鎖。

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

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

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

(2)可重入鎖

可重入鎖,是指一個(gè)線(xiàn)程獲取鎖之后再?lài)L試獲取鎖時(shí)會(huì)自動(dòng)獲取鎖,可重入鎖的優(yōu)點(diǎn)是避免死鎖。

ReentrantLock和synchronized都是可重入鎖。

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

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

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

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

(4)互斥鎖/讀寫(xiě)鎖

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

ReentrantLock和synchronized都是互斥鎖

ReadWriteLock是讀寫(xiě)鎖

(5)樂(lè)觀(guān)鎖/悲觀(guān)鎖

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

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

悲觀(guān)鎖適用于寫(xiě)操作多的場(chǎng)景,樂(lè)觀(guān)鎖適用于讀操作多的場(chǎng)景。

(6)分段鎖

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

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

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

偏向鎖,是指一段同步代碼一直被一個(gè)線(xiàn)程訪(fǎng)問(wèn),那么這個(gè)線(xiàn)程會(huì)自動(dòng)獲取鎖,降低獲取鎖的代價(jià)。

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

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

(8)自旋鎖

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

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

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

(10)mutex鎖

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家

相關(guān)文章

  • 使用Java8實(shí)現(xiàn)觀(guān)察者模式的方法(上)

    使用Java8實(shí)現(xiàn)觀(guān)察者模式的方法(上)

    本文給大家介紹使用java8實(shí)現(xiàn)觀(guān)察者模式的方法,涉及到j(luò)ava8觀(guān)察者模式相關(guān)知識(shí),對(duì)此感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • 詳解spring-boot actuator(監(jiān)控)配置和使用

    詳解spring-boot actuator(監(jiān)控)配置和使用

    本篇文章主要介紹了spring-boot actuator(監(jiān)控)配置和使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 手動(dòng)添加jar包進(jìn)Maven本地庫(kù)內(nèi)的方法

    手動(dòng)添加jar包進(jìn)Maven本地庫(kù)內(nèi)的方法

    這篇文章主要介紹了手動(dòng)添加jar包進(jìn)Maven本地庫(kù)內(nèi)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • MyBatis實(shí)現(xiàn)數(shù)據(jù)庫(kù)類(lèi)型和Java類(lèi)型的轉(zhuǎn)換

    MyBatis實(shí)現(xiàn)數(shù)據(jù)庫(kù)類(lèi)型和Java類(lèi)型的轉(zhuǎn)換

    MyBatis 在處理數(shù)據(jù)庫(kù)查詢(xún)結(jié)果或傳遞參數(shù)時(shí),需要將數(shù)據(jù)庫(kù)類(lèi)型與 Java 類(lèi)型之間進(jìn)行轉(zhuǎn)換,本文就給大家介紹MyBatis如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)類(lèi)型和 Java 類(lèi)型的轉(zhuǎn)換的,需要的朋友可以參考下
    2024-09-09
  • spring boot整合Cucumber(BDD)的方法

    spring boot整合Cucumber(BDD)的方法

    本篇文章主要介紹了spring boot整合Cucumber(BDD)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • SpringBoot集成JWT實(shí)現(xiàn)token驗(yàn)證的流程

    SpringBoot集成JWT實(shí)現(xiàn)token驗(yàn)證的流程

    Json web token (JWT), 是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開(kāi)放標(biāo)準(zhǔn)((RFC 7519).這篇文章主要介紹了SpringBoot集成JWT實(shí)現(xiàn)token驗(yàn)證,需要的朋友可以參考下
    2020-01-01
  • Java如何將int型數(shù)組轉(zhuǎn)為String型數(shù)組

    Java如何將int型數(shù)組轉(zhuǎn)為String型數(shù)組

    這篇文章主要介紹了Java如何將int型數(shù)組轉(zhuǎn)為String型數(shù)組,本文給大家分享具體實(shí)現(xiàn)思路結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • java基礎(chǔ)的詳細(xì)了解第六天

    java基礎(chǔ)的詳細(xì)了解第六天

    這篇文章對(duì)Java編程語(yǔ)言的基礎(chǔ)知識(shí)作了一個(gè)較為全面的匯總,在這里給大家分享一下。需要的朋友可以參考,希望能給你帶來(lái)幫助
    2021-08-08
  • 如何配置Eclipse實(shí)現(xiàn)定制登錄界面

    如何配置Eclipse實(shí)現(xiàn)定制登錄界面

    本文介紹了如何配置Eclipse實(shí)現(xiàn)定制登錄界面,每一步的講解都很細(xì)致,感興趣的小伙伴可以閱讀一下
    2015-07-07
  • springboot異步@Async的使用及失效場(chǎng)景介紹

    springboot異步@Async的使用及失效場(chǎng)景介紹

    本文主要介紹了springboot異步@Async的使用及失效場(chǎng)景介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12

最新評(píng)論

农安县| 松滋市| 宣恩县| 高淳县| 宜黄县| 德格县| 宁强县| 嘉义县| 张家川| 广河县| 庄浪县| 镇安县| 石嘴山市| 石楼县| 高陵县| 安西县| 邹城市| 墨竹工卡县| 南安市| 屏边| 舟曲县| 隆昌县| 黑龙江省| 日喀则市| 闽清县| 九龙城区| 尼玛县| 阳新县| 健康| 江川县| 苍山县| 文安县| 庄浪县| 高邮市| 西华县| 礼泉县| 滦南县| 阿坝县| 宁波市| 长沙县| 九龙坡区|