如何保證線程按照指定次序執行-CountDownLatch

      網友投稿 904 2022-05-30

      在前幾篇文章

      《如何保證線程按照指定次序執行-Thread.join》

      《如何保證線程按照指定次序執行-newSingleThreadExecutor線程池》

      《如何保證線程按照指定次序執行-Join函數的另一種用法》中,

      我們闡述了如何使用Thread.join()函數,單容量的線程池來保證多個線程的執行順序,今天我們來嘗試用另一種方式,通過CountDownLatch來實現。

      CountDownLatch的官方文檔如下所述:

      允許一個或多個線程等待直到在其他線程中執行的一組操作完成的同步輔助。

      其中,主要的兩個方法是await與countDown

      await()

      導致當前線程等到鎖存器計數到零

      countDown()

      減少鎖存器的計數,如果計數達到零,釋放所有等待的線程。

      如何保證線程按照指定次序執行-CountDownLatch

      即按照CountDownLatch的思路來實現線程順序執行,需要闡述為:

      在C線程之前前,要先執行B線程;在B線程執行前,先執行A線程。

      C線程中調用await方法等待B線程執行完畢,B線程執行完畢后調用countDown從而喚起C線程繼續執行。

      同樣的,B線程中調用await方法等待A線程執行完畢,A線程執行完畢后調用countDown從而喚起B線程繼續執行。

      實現代碼如下所示:需要使用兩個CountDownLatch對象,分別來控制A線程先于B線程執行,以及B線程先于C線程執行。

      package com.qiweiwei.thread; import java.util.concurrent.CountDownLatch; public class ThreadCountDownLatchDemo { public static void main(String[] args) throws InterruptedException { final CountDownLatch latchA = new CountDownLatch(1); final CountDownLatch latchB = new CountDownLatch(1); Thread A = new Thread(() -> { System.out.println("A線程執行"); latchA.countDown(); }); Thread B = new Thread(() -> { try { System.out.println("等待A線程執行..."); latchA.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("B線程執行"); latchB.countDown(); }); Thread C = new Thread(() -> { try { System.out.println("等待B線程執行..."); latchB.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("C線程執行"); }); C.start(); B.start(); A.start(); } }

      執行結果如下所示:

      等待B線程執行…

      等待A線程執行…

      A線程執行

      B線程執行

      C線程執行

      注意,通過try-catch來確保子線程中的countDown得到執行,從而保證后續線程可以被成功喚醒。

      任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:linux sha256sum 檢查已安裝rpm包
      下一篇:【Android 應用開發】LruCache 簡介
      相關文章
      色在线亚洲视频www| 日韩精品亚洲人成在线观看 | 亚洲AV综合色区无码二区偷拍| 亚洲欧洲日产国码无码网站| 亚洲国产精品激情在线观看| 国产亚洲视频在线观看网址| 亚洲成a人片在线不卡一二三区 | 亚洲综合无码一区二区痴汉| tom影院亚洲国产一区二区| 亚洲精品影院久久久久久| 亚洲色图古典武侠| 亚洲国产午夜电影在线入口| 亚洲天堂电影在线观看| 亚洲国产av高清无码| 亚洲人成网站18禁止久久影院| 亚洲国产精品白丝在线观看| 亚洲免费福利视频| 亚洲伊人久久大香线蕉结合| 亚洲精品人成网在线播放影院 | 亚洲人成伊人成综合网久久久| 亚洲人成网77777色在线播放| 国产亚洲综合网曝门系列| 国产AV无码专区亚洲AV男同| 亚洲AV无码久久精品蜜桃| 亚洲欧洲日韩不卡| 亚洲美女激情视频| 亚洲综合久久一本伊伊区| 亚洲香蕉久久一区二区三区四区| 亚洲综合色丁香婷婷六月图片| 一本色道久久综合亚洲精品蜜桃冫| 亚洲色少妇熟女11p| 一本久久综合亚洲鲁鲁五月天| 亚洲XX00视频| 亚洲乱亚洲乱妇无码麻豆| 亚洲AV中文无码乱人伦下载 | 亚洲福利视频导航| 亚洲白色白色永久观看| 99999久久久久久亚洲| 亚洲av第一网站久章草| 亚洲精品专区在线观看| 亚洲日韩小电影在线观看|