亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

實例講解Java并發(fā)編程之閉鎖

 更新時間:2015年04月13日 10:50:45   投稿:junjie  
這篇文章主要介紹了實例講解Java并發(fā)編程之閉鎖,閉鎖相當于一扇門,在閉鎖到達結束狀態(tài)之前,這扇門一直是關閉著的,沒有任何線程可以通過,當?shù)竭_結束狀態(tài)時,這扇門才會打開并容許所有線程通過,需要的朋友可以參考下

閉鎖相當于一扇門,在閉鎖到達結束狀態(tài)之前,這扇門一直是關閉著的,沒有任何線程可以通過,當?shù)竭_結束狀態(tài)時,這扇門才會打開并容許所有線程通過。它可以使一個或多個線程等待一組事件發(fā)生。閉鎖狀態(tài)包括一個計數(shù)器,初始化為一個正式,正數(shù)表示需要等待的事件數(shù)量。countDown方法遞減計數(shù)器,表示一個事件已經(jīng)發(fā)生,而await方法等待計數(shù)器到達0,表示等待的事件已經(jīng)發(fā)生。CountDownLatch強調(diào)的是一個線程(或多個)需要等待另外的n個線程干完某件事情之后才能繼續(xù)執(zhí)行。

場景應用:
10個運動員準備賽跑,他們等待裁判一聲令下就開始同時跑,當最后一個人通過終點的時候,比賽結束。10個運動相當于10個線程,這里關鍵是控制10個線程同時跑起來,還有怎么判斷最后一個線程到達終點??梢杂?個閉鎖,第一個閉鎖用來控制10個線程等待裁判的命令,第二個閉鎖控制比賽結束。

import java.util.concurrent.CountDownLatch;
 
class Aworker implements Runnable {
 private int num;
 private CountDownLatch begin;
 private CountDownLatch end;
 
 public Aworker(int num, final CountDownLatch begin, final CountDownLatch end) {
 this.num = num;
 this.begin = begin;
 this.end = end;
 }
 
 @Override
 public void run() {
 // TODO Auto-generated method stub
 try {
  System.out.println(num + "th people is ready");
  begin.await();  //準備就緒
 } catch (InterruptedException e) {
  e.printStackTrace();
 } finally {
  end.countDown();  //計數(shù)器減一,到達終點
  System.out.println(num + "th people arrive");
 }
 }
}
 
public class Race {
 public static void main(String[] args) {
 int num = 10;
 CountDownLatch begin = new CountDownLatch(1);
 CountDownLatch end = new CountDownLatch(num);
 
 for (int i = 1; i <= num; i++) {
  new Thread(new Aworker(i, begin, end)).start();
 }
 
 try {
  Thread.sleep((long) (Math.random() * 5000));
 } catch (InterruptedException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
 } 
 System.out.println("judge say : run !");
 begin.countDown(); //裁判一聲令下開始跑
 long startTime = System.nanoTime();
 try {
  end.await(); //等待結束
 } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } finally {
  long endTime = System.nanoTime();
  System.out.println("judge say : all arrived !");
  System.out.println("spend time: " + (endTime - startTime));
 }
 }
}

輸出

1th people is ready
2th people is ready
4th people is ready
6th people is ready
3th people is ready
10th people is ready
8th people is ready
5th people is ready
7th people is ready
9th people is ready
judge say : run !
1th people arrive
4th people arrive
10th people arrive
5th people arrive
2th people arrive
judge say : all arrived !
9th people arrive
7th people arrive
8th people arrive
3th people arrive
6th people arrive
spend time: 970933

相關文章

  • SpringBoot中的文件上傳和異常處理詳解

    SpringBoot中的文件上傳和異常處理詳解

    這篇文章主要介紹了SpringBoot中的文件上傳和異常處理詳解,對于機器客戶端,它將生成JSON響應,其中包含錯誤,HTTP狀態(tài)和異常消息的詳細信息,對于瀏覽器客戶端,響應一個"whitelabel"錯誤視圖,以HTML格式呈現(xiàn)相同的數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • 詳解關于java文件下載文件名亂碼問題解決方案

    詳解關于java文件下載文件名亂碼問題解決方案

    這篇文章主要介紹了詳解關于java文件下載文件名亂碼問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • java遍歷機制性能的比較詳解

    java遍歷機制性能的比較詳解

    這篇文章主要給大家介紹了關于java遍歷機制性能比較的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • Java多線程之Semaphore實現(xiàn)信號燈

    Java多線程之Semaphore實現(xiàn)信號燈

    這篇文章主要給大家分享的是Java多線程之Semaphore實現(xiàn)信號燈的練習,emaphore是計數(shù)信號量。Semaphore管理一系列許可證。每個acquire方法阻塞,直到有一個許可證可以獲得然后拿走一個許可證;下面一起進入文章學習Semaphore的具體內(nèi)容
    2021-10-10
  • SpringCloud-Spring?Boot?Starter使用測試及問題小結

    SpringCloud-Spring?Boot?Starter使用測試及問題小結

    Spring?Boot?Starter?是在?SpringBoot?組件中被提出來的一種概念、簡化了很多煩瑣的配置、通過引入各種?Spring?Boot?Starter?包可以快速搭建出一個項目的腳手架,這篇文章主要介紹了SpringCloud-Spring?Boot?Starter使用測試,需要的朋友可以參考下
    2022-07-07
  • Spring Cloud微服務架構的構建:分布式配置中心(加密解密功能)

    Spring Cloud微服務架構的構建:分布式配置中心(加密解密功能)

    這篇文章主要給大家介紹了關于Spring Cloud微服務架構的構建:分布式配置中心(加密解密)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用具有一定的參考學習價值,需要的朋友可以參考下
    2018-05-05
  • Java虛擬機之雙親委派機制詳解

    Java虛擬機之雙親委派機制詳解

    這篇文章主要為大家介紹了Java虛擬機之雙親委派機制,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 通過實例了解java checked和unchecked異常

    通過實例了解java checked和unchecked異常

    這篇文章主要介紹了通過實例了解checked和unchecked異常,Java異常分為兩種類型,checked異常和unchecked異常,另一種叫法是異常和錯誤。下面小編就帶大家來一起學習一下吧
    2019-06-06
  • Java動態(tài)代理語法Proxy類原理詳解

    Java動態(tài)代理語法Proxy類原理詳解

    這篇文章主要介紹了Java動態(tài)代理語法Proxy類原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • spring中時間格式化的兩種方法示例講解

    spring中時間格式化的兩種方法示例講解

    這篇文章主要介紹了spring中時間格式化的兩種方法,方法一自己格式化,方法二通過配置,結合實例代碼講解的非常詳細,文中補充介紹了Spring項目中時間格式化的方法,需要的朋友可以參考下
    2023-08-08

最新評論