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

Java中的5種同步輔助類介紹

 更新時(shí)間:2014年04月22日 10:44:07   作者:  
你提交了一些任務(wù),但你想等它們都完成了再做另外一些事情;你提交了一些任務(wù),但是不想讓它們立刻執(zhí)行,等你喊123開始的時(shí)候,它們才開始執(zhí)行;等等這些場景,線程之間需要相互配合,或者等待某一個(gè)條件成熟執(zhí)行。這些場景想你就需要用到同步輔助類

 當(dāng)你使用synchronized關(guān)鍵字的時(shí)候,是通過互斥器來保障線程安全以及對共享資源的同步訪問。線程間也經(jīng)常需要更進(jìn)一步的協(xié)調(diào)執(zhí)行,來完成復(fù)雜的并發(fā)任務(wù),比如wait/notify模式就是一種在多線程環(huán)境下的協(xié)調(diào)執(zhí)行機(jī)制。

通過API來獲取和釋放鎖(使用互斥器)或者調(diào)用wait/notify等方法都是底層調(diào)用的方式。進(jìn)一步來說,有必要為線程同步創(chuàng)建更高層次的抽象。通常用到的同步輔助類,就是對2個(gè)或多個(gè)線程間的同步活動(dòng)機(jī)制做進(jìn)一步封裝,其內(nèi)部原理是通過使用現(xiàn)有的底層API來實(shí)現(xiàn)復(fù)雜的線程間的協(xié)調(diào)。

有5種同步輔助類適用于常見的同步場景:

1. Semaphore 信號量是一類經(jīng)典的同步工具。信號量通常用來限制線程可以同時(shí)訪問的(物理或邏輯)資源數(shù)量。

2.CountDownLatch 一種非常簡單、但很常用的同步輔助類。其作用是在完成一組正在其他線程中執(zhí)行的操作之前,允許一個(gè)或多個(gè)線程一直阻塞。

3.CyclicBarrier 一種可重置的多路同步點(diǎn),在某些并發(fā)編程場景很有用。它允許一組線程互相等待,直到到達(dá)某個(gè)公共的屏障點(diǎn) (common barrier point)。在涉及一組固定大小的線程的程序中,這些線程必須不時(shí)地互相等待,此時(shí) CyclicBarrier 很有用。因?yàn)樵?barrier在釋放等待線程后可以重用,所以稱它為循環(huán)的barrier。

4.Phaser 一種可重用的同步屏障,功能上類似于CyclicBarrier和CountDownLatch,但使用上更為靈活。非常適用于在多線程環(huán)境下同步協(xié)調(diào)分階段計(jì)算任務(wù)(Fork/Join框架中的子任務(wù)之間需同步時(shí),優(yōu)先使用Phaser)

5.Exchanger 允許兩個(gè)線程在某個(gè)匯合點(diǎn)交換對象,在某些管道設(shè)計(jì)時(shí)比較有用。Exchanger提供了一個(gè)同步點(diǎn),在這個(gè)同步點(diǎn),一對線程可以交換數(shù)據(jù)。每個(gè)線程通過exchange()方法的入口提供數(shù)據(jù)給他的伙伴線程,并接收他的伙伴線程提供的數(shù)據(jù)并返回。當(dāng)兩個(gè)線程通過Exchanger交換了對象,這個(gè)交換對于兩個(gè)線程來說都是安全的。Exchanger可以認(rèn)為是 SynchronousQueue 的雙向形式,在運(yùn)用到遺傳算法和管道設(shè)計(jì)的應(yīng)用中比較有用。

相關(guān)文章

  • SpringBoot可視化接口開發(fā)工具magic-api的簡單使用教程

    SpringBoot可視化接口開發(fā)工具magic-api的簡單使用教程

    作為Java后端開發(fā),平時(shí)開發(fā)API接口的時(shí)候經(jīng)常需要定義Controller、Service、Dao、Mapper、XML、VO等Java對象。有沒有什么辦法可以讓我們不寫這些代碼,直接操作數(shù)據(jù)庫生成API接口呢?今天給大家推薦一款工具magic-api,來幫我們實(shí)現(xiàn)這個(gè)小目標(biāo)!
    2021-06-06
  • SpringBoot工程啟動(dòng)順序與自定義監(jiān)聽超詳細(xì)講解

    SpringBoot工程啟動(dòng)順序與自定義監(jiān)聽超詳細(xì)講解

    這篇文章主要介紹了SpringBoot工程啟動(dòng)順序與自定義監(jiān)聽,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • 使用SpringCache加Redis做緩存

    使用SpringCache加Redis做緩存

    這篇文章主要介紹了使用SpringCache加Redis做緩存方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 使用SpringAOP獲取用戶操作日志入庫

    使用SpringAOP獲取用戶操作日志入庫

    這篇文章主要介紹了使用SpringAOP獲取用戶操作日志入庫,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解Java注解知識(shí)點(diǎn)

    詳解Java注解知識(shí)點(diǎn)

    這篇文章主要介紹了詳解Java注解知識(shí)點(diǎn),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • MyBatis控制臺(tái)顯示SQL語句的方法實(shí)現(xiàn)

    MyBatis控制臺(tái)顯示SQL語句的方法實(shí)現(xiàn)

    這篇文章主要介紹了MyBatis控制臺(tái)顯示SQL語句的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • mybatis單元測試過程(無需啟動(dòng)容器)

    mybatis單元測試過程(無需啟動(dòng)容器)

    在MyBatis中,單元測試無需啟動(dòng)容器即可進(jìn)行,主要涉及Configuration類、Executor接口及其實(shí)現(xiàn)類,以及XMLMapperBuilder的作用,Configuration類是配置的承載者,負(fù)責(zé)初始化并解析配置文件,Executor接口及其實(shí)現(xiàn)類
    2024-09-09
  • Java中注解@JsonFormat的用法詳解

    Java中注解@JsonFormat的用法詳解

    這篇文章主要給大家介紹了關(guān)于Java中注解@JsonFormat用法的相關(guān)資料,以及分享了@JsonFormat 將枚舉序列化為對象的方法,文中給出了詳細(xì)的代碼實(shí)例,需要的朋友可以參考下
    2023-01-01
  • Java源碼解析阻塞隊(duì)列ArrayBlockingQueue常用方法

    Java源碼解析阻塞隊(duì)列ArrayBlockingQueue常用方法

    今天小編就為大家分享一篇關(guān)于Java源碼解析阻塞隊(duì)列ArrayBlockingQueue常用方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • javabean servlet jsp實(shí)現(xiàn)分頁功能代碼解析

    javabean servlet jsp實(shí)現(xiàn)分頁功能代碼解析

    這篇文章主要為大家詳細(xì)解析了javabean servlet jsp實(shí)現(xiàn)分頁功能代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評論

马龙县| 苏尼特左旗| 迭部县| 武山县| 河源市| 驻马店市| 平塘县| 哈巴河县| 云林县| 古蔺县| 泌阳县| 凤台县| 双城市| 永仁县| 四会市| 大洼县| 新兴县| 乌海市| 德州市| 会理县| 牟定县| 托克托县| 天柱县| 永德县| 巫溪县| 闸北区| 宁津县| 蛟河市| 宜都市| 怀远县| 广丰县| 巨野县| 新沂市| 乌拉特中旗| 辉南县| 碌曲县| 资源县| 沛县| 新营市| 抚宁县| 耒阳市|