一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java多線程編程之CountDownLatch同步工具使用實例

Java多線程編程之CountDownLatch同步工具使用實例

2019-12-17 13:44junjie JAVA教程

這篇文章主要介紹了Java多線程編程之CountDownLatch同步工具使用實例,需要的朋友可以參考下

好像倒計時計數器,調用CountDownLatch對象的countDown方法就將計數器減1,當到達0時,所有等待者就開始執行。

java.util.concurrent.CountDownLatch
一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。用給定的計數初始化CountDownLatch。由于調用了countDown()方法,所以在當前計數到達零之前,await方法會一直受阻塞。之后,會釋放所有等待的線程,await的所有后續調用都將立即返回。這種現象只出現一次——計數無法被重置。如果需要重置計數,請考慮使用CyclicBarrier。

CountDownLatch是一個通用同步工具,它有很多用途。將計數1初始化的CountDownLatch用作一個簡單的開/關鎖存器,或入口:在通過調用countDown()的線程打開入口前,所有調用await的線程都一直在入口處等待。用N初始化的 CountDownLatch可以使一個線程在N個線程完成某項操作之前一直等待,或者使其在某項操作完成N次之前一直等待。

CountDownLatch的一個有用特性是,它不要求調用countDown方法的線程等到計數到達零時才繼續,而在所有線程都能通過之前,它只是阻止任何線程繼續通過一個await。

Java多線程編程之CountDownLatch同步工具使用實例

舉例:多個運動員等待裁判命令:裁判等所有運動員到齊后發布結果

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.ljq.test.thread;
 
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
public class CountdownLatchTest {
 
  public static void main(String[] args) {
    ExecutorService service = Executors.newCachedThreadPool();
    //裁判發布命令的計數器,計數器為0,運動員就跑
    final CountDownLatch cdOrder = new CountDownLatch(1);
    //運動員跑到終點的計數器,為0裁判宣布結果
    final CountDownLatch cdAnswer = new CountDownLatch(3);
     
    //產生3個運動員
    for(int i=0;i<3;i++){
      Runnable runnable = new Runnable(){
          public void run(){
          try {
            System.out.println("線程" + Thread.currentThread().getName() + "正準備接受命令");           
            cdOrder.await();
            System.out.println("線程" + Thread.currentThread().getName() + "已接受命令");              
            Thread.sleep((long)(Math.random()*10000));
            System.out.println("線程" + Thread.currentThread().getName() + "回應命令處理結果");          
            cdAnswer.countDown();          
          } catch (Exception e) {
            e.printStackTrace();
          }      
        }
      };
      service.execute(runnable); //運動員開始任務
    }  
     
     
    try {
      //裁判休息一會 再發布命令
      Thread.sleep((long)(Math.random()*10000));
     
      System.out.println("線程" + Thread.currentThread().getName() + "即將發布命令");         
      cdOrder.countDown(); //命令計數器置為0,發布命令
      System.out.println("線程" + Thread.currentThread().getName() + "已發送命令,正在等待結果");
      cdAnswer.await(); //等待所有運動員,計數器為0 所有運動員到位
      System.out.println("線程" + Thread.currentThread().getName() + "已收到所有響應結果");
    } catch (Exception e) {
      e.printStackTrace();
    }      
    service.shutdown();
 
  }
}

返回結果:

?
1
2
3
4
5
6
7
8
9
10
11
12
線程pool-1-thread-3正準備接受命令
線程pool-1-thread-1正準備接受命令
線程pool-1-thread-2正準備接受命令
線程main即將發布命令
線程main已發送命令,正在等待結果
線程pool-1-thread-2已接受命令
線程pool-1-thread-1已接受命令
線程pool-1-thread-3已接受命令
線程pool-1-thread-3回應命令處理結果
線程pool-1-thread-2回應命令處理結果
線程pool-1-thread-1回應命令處理結果
線程main已收到所有響應結果

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 51国产午夜精品免费视频 | 福利视频导航大全 | 男男按摩1069gⅴ | 色吧| 我的男友是消防员在线观看 | 九九免费精品视频 | 日韩精品视频福利资源站 | 91精品国产91久久久久 | 毛片一区二区三区提莫影院 | 久久青青草视频在线观 | 精品99一区二区三区麻豆 | 久久99精国产一区二区三区四区 | 视频在线观看高清免费 | 国内精品视频一区二区三区八戒 | 日韩精品成人免费观看 | 亚洲网站在线 | 忘忧草高清 | 明星ai智能人脸替换造梦在线播放 | 日本一区二区三区视频在线观看 | v视界影院.vsjla | 美女扒开胸罩露出奶 | 国产日韩欧美色视频色在线观看 | 双性肉文h | 成年男女免费视频观看性 | 国产一区二区三区久久精品 | 日韩先锋| 暖暖 免费 高清 中文 日本 | 亚洲干综合 | 女娃开嫩苞经历小说 | 朝鲜女人free性xxe | 学校捏奶揉下面污文h | 精品久久久麻豆国产精品 | 精品区2区3区4区产品乱码9 | 亚洲欧美国产另类视频 | 国产91免费在线 | 国产日本久久久久久久久婷婷 | 美女下面揉出水免费视频 | 厨房play黄瓜进入 | 成人免费淫片95视频观看网站 | a毛片久久免费观看 | 婷婷精品 |