CountDownLacth詳解

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

  用給定的計數 初始化 CounDownLatch。由于調用了countDown() 方法,所以在當前計數到達零之前,await()方法會一直受阻塞。之后,會釋放所有等待的線程,await()的所有后續調用都將立即返回。這種現象只出現一次---計數無法被重置。如果需要重置計數,請考慮使用CyclicBarrier。

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

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

  在接下來給出視頻會議的例子來說明CountDownLacth的用法,視頻會議需要等待多有的參與者都到會后才能開始。視頻會議:

public class VedioConference implements Runnable{private CountDownLatch countDownLatch;public VedioConference(int count) {this.countDownLatch = new CountDownLatch(count);}public void arrive(String name){System.out.println("參與者:"+name+"到達");countDownLatch.countDown();System.out.println("視頻會議還需要等待:"+countDownLatch.getCount()+"名參與者");}@Overridepublic void run() {try {System.out.println("視頻會議共有 :"+countDownLatch.getCount()+"名參與者");countDownLatch.await();System.out.println("所有參與者都已將到達 ");System.out.println("開始會議...");} catch (InterruptedException e) {e.printStackTrace();}}
}

  參與者:

public class Participant implements Runnable {private VedioConference conference;private String name;public Participant(VedioConference conference, String name) {this.conference = conference;this.name = name;}@Overridepublic void run() {try {//線程隨機休息一段時間Thread.currentThread().sleep((int)(Math.random()*10));} catch (InterruptedException e) {e.printStackTrace();}//調用arrive()表示參與者已經到達
        conference.arrive(name);}
}

測試類:

public class Main {public static void main(String[] args) {VedioConference conference=new VedioConference(5);Thread conThread=new Thread(conference);conThread.start();for (int i = 0; i <5; i++) {Participant participant=new Participant(conference, "participant"+i);Thread thread=new Thread(participant);thread.start();}}
}

  運行結果:

視頻會議共有 :5名參與者
參與者:participant2到達
視頻會議還需要等待:4名參與者
參與者:participant3到達
視頻會議還需要等待:3名參與者
參與者:participant1到達
視頻會議還需要等待:2名參與者
參與者:participant4到達
視頻會議還需要等待:1名參與者
參與者:participant0到達
視頻會議還需要等待:0名參與者
所有參與者都已將到達 
開始會議...

  內存一致性效果:線程中調用 countDown() 之前的操作happen-before緊跟在從另一個線程中對應 await() 成功返回的操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458785.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458785.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458785.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

怎么用計算機畫正弦函數圖像,幾何畫板如何繪制正弦函數圖象

考慮到三角函數問題描點的實際困難&#xff0c;教材表述時借助正弦線利用幾何法利用三角函數線作正弦函數圖象&#xff0c;但由此帶來的困難是如何實現這種效果。如果能讓三角函數線動起來&#xff0c;那將會更加直觀易懂。幾何畫板作為使用專業的幾何繪圖軟件&#xff0c;自帶…

C/C++常見指針錯誤 and 內存訪問越界

1) 內存分配未成功&#xff0c;卻使用了它。 編程新手常犯這種錯誤&#xff0c;因為他們沒有意識到內存分配會不成功。常用解決辦法是&#xff0c;在使用內存之前檢查指針是否為NULL。如果指針p是函數的參數&#xff0c;那么在函數的入口處用assert(p!NULL)進行檢查。如果是用m…

C#將dll打包到程序中

直接進入主題 先來看一個栗子,假設現在有一個第三方dll namespace TestLibrary1 {public class Test{public void Point(){Console.WriteLine("aaabbbccc");}} } TestLibrary1.dll在項目中引用,然后調用其中的方法Test,將輸出aaabbbccc using System;namespace Conso…

Exchange 2016集成ADRMS系列-12:域內outlook 2010客戶端測試

接下來&#xff0c;我們來到域內安裝了office 2010的機器上進行測試。 首先我們在客戶端上強制刷新組策略&#xff0c;把我們剛才設置的策略刷新下來。 然后我們可以運行gpresult /h result.html來看看策略是不是已經下來了。 策略下來之后&#xff0c;我們打開客戶端上面的out…

如何用css和HTML結合畫熊,結合偽元素實現的純CSS3高級圖形繪制

自小編上次整理了一些基礎圖形的繪制方法之后&#xff0c;大家都紛紛表示對css3的繪圖技巧學習很有幫助。雖說萬變不離其宗&#xff0c;再復雜的圖形也可以用最簡單的三角形或者圓弧組合出來&#xff0c;但仍有不少朋友反映&#xff0c;學會基本圖形也不懂得怎樣組合&#xff0…

基于C++中常見內存錯誤的總結

在系統開發過程中出現的bug相對而言是比較好解決的&#xff0c;花費在這個上面的調試代價不是很大&#xff0c;但是在系統集成后的bug往往是難以定位的bug&#xff08;最好方式是打樁&#xff0c;通過打樁可以初步鎖定出錯的位置&#xff0c;如&#xff1a;進入函數前打印日志&…

UWP開發細節記錄:判斷文件類型

StorageFile.ContentType 屬性&#xff0c;是 string 類型&#xff0c;用來表示文件內容的 MIME 類型。例如&#xff0c;音樂文件可能有 "audio/mpeg" MIME 類型。(MSDN) MIME 類型的定義可以下面的鏈接找到&#xff1a; MIME Types - http://blogs.msdn.com/b/jaime…

Creating Apps With Material Design —— Creating Lists and Cards

轉載請注明 http://blog.csdn.net/eclipsexys 翻譯自Developer Android。時間倉促&#xff0c;有翻譯問題請留言指出&#xff0c;謝謝創建Lisst和Cards在你的應用程序創建復雜的清單&#xff0c;并與材料設計風格卡。您能夠使用RecyclerView和CardView部件。 創建RecyclerView …

計算機考研自命題院校雙非,計算機考研408——951211院校匯總

眾所周知&#xff0c;計算機考研408計算機學科基礎綜合難度與一些頂尖985自命題相比也是不落下風的&#xff0c;號稱最難工科專業課(請忽略912這種殿堂級別的)&#xff0c;難度大、知識點龐雜也是前些年眾多高校紛紛脫離408統考的原因。19年的計算機類考研火到爆炸&#xff0c;…

Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)

第一次鼓搗Docker&#xff0c;- - ! 報錯&#xff1a; serverubuntu1987:~$ sudo apt-get update E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable) E: Unable to lock directory /var/lib/apt/lists/ 轉載于:https://www.cnblo…

新手學Struts(一)----JSP+Servlet講解MVC實現原理

MVC基本原理一個簡單的例子改良的例子Struts基本流程的實現最近在學SSH&#xff08;Struts HibernateSpring)&#xff0c;這也算是一個比較經典的框架了&#xff0c;之前都是看人家大牛說這個框架&#xff0c;那個框架&#xff0c;說的真溜&#xff0c;自己也是佩服的五體投地啊…

中國首臺千萬億次超級計算機,中國首臺千萬億次超級計算機首批設備開始試用...

新華社天津&#xff11;月&#xff11;&#xff13;日電(記者 周潤健 羅捷)記者&#xff11;&#xff13;日從國家超級計算天津中心獲悉&#xff0c;中國首臺千萬億次超級計算機“天河一號”首批設備調試工作結束&#xff0c;具備向客戶提供服務的條件&#xff0c;“天河一號”…

Outlook Express 錯誤代碼表

錯誤碼 意義 一般 0x800C01310x800C013E 可能是 Folders.dbx 檔案屬性錯誤或損壞. 0x800CCC00 身份驗證&#xff08;Authentication&#xff09;未載入 0x800CCC01 認證&#xff08;Certificate&#xff09;內容錯誤 0x800CCC02 認證日期錯誤 0x800CCC03 使用者已聯機 0x800CCC…

USB設備枚舉過程

&#xff08;1&#xff09;集線器檢測新設備 &#xff08;集線器的英文稱為“Hub”&#xff09;主機集線器監視著每個端口的信號電壓&#xff0c;當有新設備接入時便可覺察。&#xff08;集線器端口的兩根信號線的每一根都有15kΩ的下拉電阻&#xff0c;而每一個設備在D都有一個…

windows下apache+php+mysql 環境配置方法

轉自&#xff1a;http://www.jb51.net/article/30128.htm 一 準備 1 下載apache http://httpd.apache.org/download.cgi#apache24 httpd-2.2.22-win32-x86-openssl-0.9.8t.msiopenssl表示帶有openssl模塊&#xff0c;利用openssl可給Apache配置SSL安全鏈接 2 下載php http://wi…

計算機工作原理 公開課,《計算機的基本工作原理》公開課材料(11頁)-原創力文檔...

《計算機系統的組成》教學設計教師&#xff1a;吳軍一、學習者分析初一的學生&#xff0c;具有活潑好動的特點&#xff0c;懷著對初中生活的憧憬來到一個新的環境里&#xff0c;對每樣事物都充滿著好奇&#xff0c;都想去探個究竟。隨著社會的進步&#xff0c; 計算機的使用范圍…

USB枚舉過程分析

1. 枚舉是什么? 枚舉就是從設備讀取一些信息&#xff0c;知道設備是什么樣的設備&#xff0c;如何進行通信&#xff0c;這樣主機就可以根據這些信息來加載合適的驅動程序。調試USB設備&#xff0c;很重要的一點就是USB的枚舉過程&#xff0c;只要枚舉成功了&#xff0c;那么就…

linux -- read(), write()

read()函數 2011-03-23 16:28:37| 分類&#xff1a; linux | 標簽&#xff1a; |字號大中小 訂閱 read函數從打開的設備或文件中讀取數據。 #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 返回值&#xff1a;成功返回讀取的字節數&…

jquery的$.extend、$.fn.extend、 jQuery.extend( target, object1, [objectN])作用及區別

jQuery為開發插件提拱了兩個方法&#xff0c;分別是&#xff1a; jQuery.fn.extend();jQuery.extend(); 雖然 javascript 沒有明確的類的概念&#xff0c;但是用類來理解它&#xff0c;會更方便。 jQuery便是一個封裝得非常好的類&#xff0c;比如我們用 語句 $("#btn1&…

CATia對計算機配置要求,【2人回答】求CATIA對電腦的詳細配置要求-3D溜溜網

回答&#xff1a;1、內存要求在32G和64G之間。2、硬盤要求選擇7200轉機械硬盤&#xff0c;4k以上分辨&#xff0c;就選擇SSD固態硬盤。3、CPU要求睿頻在4.1GHZ以上&#xff0c;核心在6和8核之間。4、顯卡要求顯存在6GB和11GB之間&#xff0c;位寬要求在192bit和384bit之間。5、…