亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行并發工具類CountDownLatch與CyclicBarrier分析

發布時間:2021-12-29 14:52:26 來源:億速云 閱讀:269 作者:柒染 欄目:大數據

如何進行并發工具類CountDownLatch與CyclicBarrier分析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

CountDownLatch

基本的流程是一個線程等待其他的線程完成工作以后再執行,加強版join

類的主要方法,await用來等待,countDown(在線程里面)用來減一。

      由初始化線程決定是否放行。

我們來用代碼演示下CountDownLatch的基本使用:

public class UserCountDownLatch {  static CountDownLatch latch = new CountDownLatch(6);  //初始化線程  private static class InitThread implements Runnable{    @Override    public void run() {      System.out.println("Thread_"+Thread.currentThread().getId()+" ready init work ...");      latch.countDown();//初始化線程完成工作了。扣一次    }  }  public static void main(String[] args) throws InterruptedException {    //單獨的初始化線程,初始化分為2步,需扣減兩次    new Thread(new Runnable() {      @Override      public void run() {        try {          Thread.sleep(1000);          System.out.println("Thread_"+Thread.currentThread().getId()              +" ready init work step lst.....");          latch.countDown();//每完成一步工作,就扣減一次          System.out.println("begin step 2nd......");          Thread.sleep(1000);          System.out.println("Thread_"+Thread.currentThread().getId()              +" ready init work step 2nd.....");          latch.countDown();//每完成一步工作,就扣減一次        } catch (InterruptedException e) {          // TODO Auto-generated catch block          e.printStackTrace();        }
     }    }).start();    for(int i=0;i<=3;i++){      Thread thread = new Thread(new InitThread());      thread.start();    }    latch.await();    System.out.println("Main do ites work ....");  }}

 結果:

Thread_14 ready init work ...Thread_12 ready init work ...Thread_11 ready init work ...Thread_13 ready init work ...Thread_10 ready init work step lst.....begin step 2nd......Thread_10 ready init work step 2nd.....Main do ites work ....

小結:就必須等到countDown減完才開始執行main方法后面的程序。

CyclicBarrier

讓一組線程達到某個屏障,被阻塞,一直到組內最后一個線程達到屏障時,屏障開放,所有被阻塞的線程會繼續運行。

      由工作線程決定是否運行。

我們來用代碼演示下CyclicBarrier的基本使用:

public class UseCyclicBarrier {  private static CyclicBarrier barrier =       new CyclicBarrier(5,new CollectThread());//屏障開放后,CollectThread()就會執行.    private static ConcurrentHashMap<String, Long> resultMap =       new ConcurrentHashMap<String, Long>();//存放子線程工作結果的容器    public static void main(String[] args){    for(int i=0;i<=4;i++){      Thread thread = new Thread(new SubThread());      thread.start();    }  }  //負責屏障開放以后的工作  private static class CollectThread implements Runnable{    @Override    public void run() {      StringBuilder result = new StringBuilder();      for(Map.Entry<String, Long> workResult:resultMap.entrySet()){        result.append("["+workResult.getValue()+"]");      }            System.out.println("the result = "+result);      System.out.println("do other business......");    }    }  //工作線程  private static class SubThread implements Runnable{    @Override    public void run() {      long id = Thread.currentThread().getId();      resultMap.put(Thread.currentThread().getId()+"", id);      Random r = new Random();//隨機決定工作線程的是否睡眠      try{        if(r.nextBoolean()){            Thread.sleep(2000+id);            System.out.println("Thread_"+id+".....do its business ");          }          System.out.println(id+".....is await");          barrier.await();//          Thread.sleep(1000+id);          System.out.println("Thread_"+id+".....do its business ");        }catch(Exception e){          e.printStackTrace();        }      }    }  }

小結:在初始化的時候,開放屏障后,可以使用指定執行的線程。

CyclicBarrier(int parties,RunnablebarrierAction)

不同在于動作的實施者是不同的,CountDownLatch 的下一步動作實施者是main函數,而CyclicBarrier下一步的動作實施者可以為其他線程。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

涞源县| 龙岩市| 昌乐县| 临颍县| 湾仔区| 集贤县| 渭源县| 兴业县| 蒙城县| 彰武县| 梨树县| 兴义市| 灌云县| 沙坪坝区| 泸溪县| 阳泉市| 化州市| 嘉义市| 中阳县| 海盐县| 广饶县| 略阳县| 嫩江县| 嵊州市| 蓝田县| 崇州市| 三亚市| 山阳县| 南丹县| 庆云县| 深州市| 裕民县| 高台县| 济南市| 长春市| 得荣县| 长垣县| 松江区| 沾化县| 蒙山县| 沙河市|