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

java同步開篇入門簡單介紹

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

概覽
這一篇的內容是一個大概的介紹,大致包含三大主題:java中的鎖、同步器、分布式鎖,大致講的內容如下:

(1)volatile

(2)synchronized

(3)AQS及Condition

(4)ReentrantLock

(5)ReentrantReadWriteLock

(6)StampedLock

(7)CountDownLatch

(8)Semaphore

(9)CyclicBarrier

(10)Phaser

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

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

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

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

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

(1)公平鎖/非公平鎖

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

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

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

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

(2)可重入鎖

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

ReentrantLock和synchronized都是可重入鎖。

(3)獨享鎖/共享鎖

獨享鎖,是指鎖一次只能被一個線程持有。

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

ReentrantLock和synchronized都是獨享鎖,ReadWriteLock的讀鎖是共享鎖,寫鎖是獨享鎖。

(4)互斥鎖/讀寫鎖

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

ReentrantLock和synchronized都是互斥鎖

ReadWriteLock是讀寫鎖

(5)樂觀鎖/悲觀鎖

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

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

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

(6)分段鎖

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

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

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

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

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

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

(8)自旋鎖

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

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

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

(10)mutex鎖

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家

相關文章

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

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

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

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

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

    手動添加jar包進Maven本地庫內的方法

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

    MyBatis實現(xiàn)數據庫類型和Java類型的轉換

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

    spring boot整合Cucumber(BDD)的方法

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

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

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

    Java如何將int型數組轉為String型數組

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

    java基礎的詳細了解第六天

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

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

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

    springboot異步@Async的使用及失效場景介紹

    本文主要介紹了springboot異步@Async的使用及失效場景介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12

最新評論

来宾市| 湟中县| 海原县| 闻喜县| 九龙县| 湖北省| 鸡东县| 镇原县| 高邮市| 东阿县| 江达县| 温宿县| 磐石市| 昌图县| 衢州市| 揭阳市| 秦皇岛市| 拜城县| 永清县| 积石山| 大连市| 革吉县| 五家渠市| 金沙县| 凌源市| 昌平区| 华安县| 阿尔山市| 乌拉特中旗| 新安县| 日喀则市| 双鸭山市| 绿春县| 庆元县| 英超| 昌平区| 芜湖县| 务川| 共和县| 沅江市| 扶沟县|