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

Java并發(fā)編程之閉鎖與柵欄的實(shí)現(xiàn)

 更新時(shí)間:2020年04月30日 10:03:24   作者:與李  
這篇文章主要介紹了Java并發(fā)編程之閉鎖與柵欄的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

閉鎖與柵欄是在多線程編程中的概念,因?yàn)樵诙嗑€程中,我們不能控制線程的執(zhí)行狀態(tài),所以給線程加鎖,讓其按照我們的想法有秩序的執(zhí)行。

閉鎖

CountDownLatch,實(shí)例化時(shí)需要傳入一個(gè)int類型的數(shù)字(count),意為等待count個(gè)線程完成之后才能執(zhí)行下一步動(dòng)作。

如今天要做的事情是吃晚飯,再去散步。假設(shè)11個(gè)人相約晚飯后一起去散步,我們得等11個(gè)人全都吃完晚飯了才能出發(fā)去散步。簡(jiǎn)而言之就是做了才到達(dá)某一種狀態(tài)。

柵欄

CyclicBarrier,實(shí)例化時(shí)需要傳入一個(gè)int類型的數(shù)字(parties),意為等待parties個(gè)線程都準(zhǔn)備就緒后才能執(zhí)行自己的任務(wù)。

如今天要做的事情是吃晚飯,8個(gè)人約好一起去某餐廳吃飯,得等到人齊了才能去吃飯。簡(jiǎn)而言之就是到達(dá)某種狀態(tài)后一起做。

二、實(shí)例

閉鎖 CountDownLatch

package com.test;
 
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CountDownLatch;
 
public class Test {
 public static void main(String[] args) {
 CountDownLatch latch = new CountDownLatch(3);
 
        // 模擬三個(gè)任務(wù)
 List<String> jobs = new ArrayList<String>();
 jobs.add("first");
 jobs.add("second");
 jobs.add("third");
    
        // 循環(huán)執(zhí)行任務(wù)
 for (String job : jobs) {
  new Thread(new Runnable() {
 
  @Override
  public void run() {
   System.out.println(Thread.currentThread().getName() + " : 進(jìn)入run方法");
   latch.countDown();
   System.out.println(Thread.currentThread().getName() + " : 執(zhí)行" + job);
  }
  }).start();
 }
 
 try {
  latch.await();
 } catch (InterruptedException e) {
  e.printStackTrace();
 }
 // 任務(wù)都執(zhí)行完后才執(zhí)行
 System.out.println("回到main線程");
 }
 
}

執(zhí)行結(jié)果:

Thread-1 : 進(jìn)入run方法

Thread-2 : 進(jìn)入run方法

Thread-2 : 執(zhí)行third

Thread-0 : 進(jìn)入run方法

Thread-1 : 執(zhí)行second

Thread-0 : 執(zhí)行first

回到main線程

通過(guò)執(zhí)行結(jié)果可看出,當(dāng)所有線程都執(zhí)行完后才能回到主線程繼續(xù)執(zhí)行后面的輸出。

柵欄 CyclicBarrier

package com.test;
 
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
 
public class Test {
 public static void main(String[] args) {
 CyclicBarrier barrier = new CyclicBarrier(3);
 // 模擬創(chuàng)建三個(gè)任務(wù)
 List<String> jobs = new ArrayList<String>();
 jobs.add("first");
 jobs.add("second");
 jobs.add("third");
 //循環(huán)執(zhí)行任務(wù)
 for (String job : jobs) {
  new Thread(new Runnable() {
 
  @Override
  public void run() {
   System.out.println(Thread.currentThread().getName() + " : 進(jìn)入run方法");
   try {
   // 等待
   barrier.await();
   } catch (InterruptedException | BrokenBarrierException e) {
   e.printStackTrace();
   }
   System.out.println(Thread.currentThread().getName() + " : 執(zhí)行" + job);
  }
  }).start();
 }
 } 
}

執(zhí)行結(jié)果:

Thread-1 : 進(jìn)入run方法

Thread-2 : 進(jìn)入run方法

Thread-0 : 進(jìn)入run方法

Thread-0 : 執(zhí)行first

Thread-1 : 執(zhí)行second

Thread-2 : 執(zhí)行third

通過(guò)執(zhí)行結(jié)果可看出,當(dāng)所有線程都執(zhí)行都進(jìn)入到run方法后,才能繼續(xù)執(zhí)行自己內(nèi)部的方法。

到此這篇關(guān)于Java并發(fā)編程之閉鎖與柵欄的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java 閉鎖與柵欄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java利用POI讀取excel文件的方法

    java利用POI讀取excel文件的方法

    這篇文章主要介紹了java利用POI讀取excel文件的方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-12-12
  • 使用IDEA搭建Hadoop開(kāi)發(fā)環(huán)境的操作步驟(Window10為例)

    使用IDEA搭建Hadoop開(kāi)發(fā)環(huán)境的操作步驟(Window10為例)

    經(jīng)過(guò)三次重裝,查閱無(wú)數(shù)資料后成功完成hadoop在win10上實(shí)現(xiàn)偽分布式集群,以及IDEA開(kāi)發(fā)環(huán)境的搭建。一步一步跟著本文操作可以避免無(wú)數(shù)天坑
    2021-07-07
  • 解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system的異常問(wèn)題

    解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system

    今天小編就為大家分享一篇關(guān)于解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system的異常問(wèn)題,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 在Java中使用Moshi?JSON庫(kù)的方法詳解

    在Java中使用Moshi?JSON庫(kù)的方法詳解

    Moshi?是一個(gè)可用于?Java?與?Kotlin?的?JSON?序列化與反序列化庫(kù),其主要使用?Kotlin?編寫(xiě),本文以樣例代碼的方式來(lái)演示該庫(kù)在?Java?中的使用,需要的朋友可以參考下
    2024-04-04
  • Java字符流與字節(jié)流區(qū)別與用法分析

    Java字符流與字節(jié)流區(qū)別與用法分析

    這篇文章主要介紹了Java字符流與字節(jié)流區(qū)別與用法,較為詳細(xì)的分析了java字符流與字節(jié)流的概念、功能與使用方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • Java中String類常用類型實(shí)例總結(jié)

    Java中String類常用類型實(shí)例總結(jié)

    在我們開(kāi)發(fā)中經(jīng)常會(huì)用到很多的常用的工具類,這里做一個(gè)總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java中String類常用類型的相關(guān)資料,String類代表字符串,需要的朋友可以參考下
    2021-12-12
  • SpringBoot攔截器如何獲取http請(qǐng)求參數(shù)

    SpringBoot攔截器如何獲取http請(qǐng)求參數(shù)

    這篇文章主要給大家介紹了SpringBoot攔截器如何獲取http請(qǐng)求參數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 詳解SpringBean基于XML的裝配

    詳解SpringBean基于XML的裝配

    Bean的裝配可以理解為依賴關(guān)系注入,Bean的裝配方式也就是Bean 的依賴注入方式.Spring容器支持多種形式的Bean的裝配方式,如基于XML的Bean裝配,基于Annotation的Bean裝配和自動(dòng)裝配等.本文就帶大家了解SpringBean基于XML的裝配,需要的朋友可以參考下
    2021-05-05
  • Java文件(io)編程之文件字符流使用方法詳解

    Java文件(io)編程之文件字符流使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java文件(io)編程之文件字符流使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • SpringBoot實(shí)現(xiàn)quartz定時(shí)任務(wù)可視化管理功能

    SpringBoot實(shí)現(xiàn)quartz定時(shí)任務(wù)可視化管理功能

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)quartz定時(shí)任務(wù)可視化管理功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08

最新評(píng)論