最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java CountDownLatch應(yīng)用場景代碼實(shí)例

 更新時間:2020年09月30日 08:31:06   作者:zapldy  
這篇文章主要介紹了Java CountDownLatch應(yīng)用場景代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

Java的concurrent包里面的CountDownLatch其實(shí)可以把它看作一個計(jì)數(shù)器,只不過這個計(jì)數(shù)器的操作是原子操作,同時只能有一個線程去操作這個計(jì)數(shù)器,也就是同時只能有一個線程去減這個計(jì)數(shù)器里面的值。

你可以向CountDownLatch對象設(shè)置一個初始的數(shù)字作為計(jì)數(shù)值,任何調(diào)用這個對象上的await()方法都會阻塞,直到這個計(jì)數(shù)器的計(jì)數(shù)值被其他的線程減為0為止。

CountDownLatch的一個非常典型的應(yīng)用場景是:有一個任務(wù)想要往下執(zhí)行,但必須要等到其他的任務(wù)執(zhí)行完畢后才可以繼續(xù)往下執(zhí)行。假如我們這個想要繼續(xù)往下執(zhí)行的任務(wù)調(diào)用一個CountDownLatch對象的await()方法,其他的任務(wù)執(zhí)行完自己的任務(wù)后調(diào)用同一個CountDownLatch對象上的countDown()方法,這個調(diào)用await()方法的任務(wù)將一直阻塞等待,直到這個CountDownLatch對象的計(jì)數(shù)值減到0為止。

舉個例子,有三個工人在為老板干活,這個老板有一個習(xí)慣,就是當(dāng)三個工人把一天的活都干完了的時候,他就來檢查所有工人所干的活。記住這個條件:三個工人先全部干完活,老板才檢查。所以在這里用Java代碼設(shè)計(jì)兩個類,Worker代表工人,Boss代表老板,具體的代碼實(shí)現(xiàn)如下:

Java代碼

package org.zapldy.concurrent; 
 
import java.util.Random; 
import java.util.concurrent.CountDownLatch; 
import java.util.concurrent.TimeUnit; 
 
public class Worker implements Runnable{ 
   
  private CountDownLatch downLatch; 
  private String name; 
   
  public Worker(CountDownLatch downLatch, String name){ 
    this.downLatch = downLatch; 
    this.name = name; 
  } 
   
  public void run() { 
    this.doWork(); 
    try{ 
      TimeUnit.SECONDS.sleep(new Random().nextInt(10)); 
    }catch(InterruptedException ie){ 
    } 
    System.out.println(this.name + "活干完了!"); 
    this.downLatch.countDown(); 
     
  } 
   
  private void doWork(){ 
    System.out.println(this.name + "正在干活!"); 
  } 
   
}

Java代碼

package org.zapldy.concurrent; 
 
import java.util.concurrent.CountDownLatch; 
 
public class Boss implements Runnable { 
 
  private CountDownLatch downLatch; 
   
  public Boss(CountDownLatch downLatch){ 
    this.downLatch = downLatch; 
  } 
   
  public void run() { 
    System.out.println("老板正在等所有的工人干完活......"); 
    try { 
      this.downLatch.await(); 
    } catch (InterruptedException e) { 
    } 
    System.out.println("工人活都干完了,老板開始檢查了!"); 
  } 
 
} 

Java代碼

package org.zapldy.concurrent;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CountDownLatchDemo {

	public static void main(String[] args) {
		ExecutorService executor = Executors.newCachedThreadPool();
		
		CountDownLatch latch = new CountDownLatch(3);
		
		Worker w1 = new Worker(latch,"張三");
		Worker w2 = new Worker(latch,"李四");
		Worker w3 = new Worker(latch,"王二");
		
		Boss boss = new Boss(latch);
		
		executor.execute(w3);
		executor.execute(w2);
		executor.execute(w1);
		executor.execute(boss);
		
		executor.shutdown();
	}

}

當(dāng)你運(yùn)行CountDownLatchDemo這個對象的時候,你會發(fā)現(xiàn)是等所有的工人都干完了活,老板才來檢查,下面是我本地機(jī)器上運(yùn)行的一次結(jié)果,可以肯定的每次運(yùn)行的結(jié)果可能與下面不一樣,但老板檢查永遠(yuǎn)是在后面的。

王二正在干活!
李四正在干活!
老板正在等所有的工人干完活......
張三正在干活!
張三活干完了!
王二活干完了!
李四活干完了!
工人活都干完了,老板開始檢查了!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用@Autowired注解獲取對象為null的幾種情況及解決方法

    Java使用@Autowired注解獲取對象為null的幾種情況及解決方法

    這篇文章主要給大家介紹了使用@Autowired注解獲取對象為null的幾種情況以及?解決方法,文中有詳細(xì)的代碼示例講解,具有一定的參考價值,需要的朋友可以參考下
    2023-09-09
  • Spring?boot?admin?服務(wù)監(jiān)控利器詳解

    Spring?boot?admin?服務(wù)監(jiān)控利器詳解

    這篇文章主要介紹了Spring?boot?admin?服務(wù)監(jiān)控利器詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 深入理解Java中1是true0是false

    深入理解Java中1是true0是false

    Java中,1可以被看作是true,0可以被看作是false,本文就來進(jìn)行詳細(xì)的講解,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Java進(jìn)階之高并發(fā)核心Selector詳解

    Java進(jìn)階之高并發(fā)核心Selector詳解

    前幾篇文章介紹了Java高并發(fā)的一些基礎(chǔ)內(nèi)容,認(rèn)識了Channel,Buffer和Selector的基本用法,有了感性認(rèn)識之后,來看看Selector的底層是如何實(shí)現(xiàn)的。,需要的朋友可以參考下
    2021-05-05
  • Java8通過Function獲取字段名的方法(獲取實(shí)體類的字段名稱)

    Java8通過Function獲取字段名的方法(獲取實(shí)體類的字段名稱)

    Java8通過Function獲取字段名。不用再硬編碼,效果類似于mybatis-plus的LambdaQueryWrapper,對Java8通過Function獲取字段名相關(guān)知識感興趣的朋友一起看看吧
    2021-09-09
  • Java實(shí)現(xiàn)定時任務(wù)的方法詳解

    Java實(shí)現(xiàn)定時任務(wù)的方法詳解

    大家都用過鬧鐘,鬧鐘可以說是一種定時任務(wù)。那么,在?Java?中,如何實(shí)現(xiàn)這樣的功能呢?即如何實(shí)現(xiàn)定時任務(wù)呢?本文就來詳細(xì)和大家聊聊
    2022-10-10
  • Java中System.setProperty()用法與實(shí)際應(yīng)用場景

    Java中System.setProperty()用法與實(shí)際應(yīng)用場景

    System.setProperty是Java中用于設(shè)置系統(tǒng)屬性的方法,它允許我們在運(yùn)行時為Java虛擬機(jī)(JVM)或應(yīng)用程序設(shè)置一些全局的系統(tǒng)屬性,下面這篇文章主要給大家介紹了關(guān)于Java中System.setProperty()用法與實(shí)際應(yīng)用場景的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • 使用java8的方法引用替換硬編碼的示例代碼

    使用java8的方法引用替換硬編碼的示例代碼

    這篇文章主要介紹了使用java8的方法引用替換硬編碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • java compareTo和compare方法比較詳解

    java compareTo和compare方法比較詳解

    這篇文章主要介紹了java compareTo和compare方法比較詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 詳解如何在Elasticsearch中搜索空值

    詳解如何在Elasticsearch中搜索空值

    這篇文章主要為大家介紹了如何在Elasticsearch中搜索空值的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評論

和平县| 泸定县| 许昌县| 渝中区| 龙游县| 团风县| 浪卡子县| 常熟市| 喜德县| 阿拉尔市| 息烽县| 甘泉县| 道真| 通辽市| 平原县| 珠海市| 名山县| 余庆县| 荔波县| 广汉市| 老河口市| 金堂县| 沙洋县| 罗山县| 齐齐哈尔市| 澎湖县| 理塘县| 凌海市| 延边| 乳源| 刚察县| 施秉县| 鸡泽县| 清镇市| 沁源县| 那曲县| 遂昌县| 哈密市| 中山市| 长寿区| 大方县|