国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JAVA并發編程之 - CountDownLatch使用場景分析

yy736044583 / 2622人閱讀

摘要:今天我們來聊一聊的使用場景。使用場景在某些業務情況下,要求我們等某個條件或者任務完成后才可以繼續處理后續任務。同時在線程完成時也會觸發一定事件。方便業務繼續向下執行。第個毒販如果當前已經沒有可以毒販,立刻返回被干掉了干掉一個。

作者 : 畢來生
微信: 878799579
前言

? 在 java.util.concurrent 包中提供了多種并發容器類來改進同步容器 的性能。今天我們來聊一聊CountDownLatch 的使用場景。看看它到底是怎么玩耍的。

CountDownLatch 是干什么的?

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

CountDownLatch原理

? CountDownLatch是通過一個計數器來實現的,計數器的初始化值為線程的數量。每當一個線程完成了自己的任務后,計數器的值就相應得減1。當計數器到達0時,表示所有的線程都已完成任務,然后在閉鎖上等待的線程就可以恢復執行任務。

使用場景

? 在某些業務情況下,要求我們等某個條件或者任務完成后才可以繼續處理后續任務。同時在線程完成時也會觸發一定事件。方便業務繼續向下執行。這個時候我們的CountDownLatch就隆重登場啦。常用核心方法為

    /**
     * 遞減計數器的計數,如果計數達到0,則釋放所有等待的線程。
     * 如果當前計數大于0,則將計數減少。
     * 如果新的計數為0,會重啟所有等待線程
     * 如果當前計數等于0,則不做任何操作
     **/
    public void countDown() {
        sync.releaseShared(1);
    }
    /**
     * 1、當前線程在倒數至0之前會一直等待
     * 2、除非線程被中斷或超出了指定的時間。
     * 3、如果當前計數為0,立刻返回為true
     * 4、如果當前計數等于0,則不做任何操作
     * 5、如果當前線程在進入此方法時已經設置了該線程的中斷狀態,
     *      或者在等待時被中斷,則拋出InterruptedException
     **/
    public boolean await(long timeout, TimeUnit unit)
            throws InterruptedException {
        return sync.tryAcquireSharedNanos(1, unit.toNanos(timeout));
    }
實戰演練
package org.bilaisheng.juc;

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

/**
 * @Author: bilaisheng
 * @Wechat: 878799579
 * @Date: 2019/1/2 23:30
 * @Todo: CountDownLatch demo。
 * @Version : JDK11 , IDEA2018
 */
public class CountDownLatchTest {

    // 舉個例子:有十個毒販在和警察激戰
    public static void main(String[] args) throws InterruptedException {

        // 開始計數器
        final CountDownLatch start = new CountDownLatch(1);
        // 結束計數器
        final CountDownLatch end = new CountDownLatch(10);

        final ExecutorService executorService = Executors.newFixedThreadPool(10);

        for (int i = 1; i <= 10; i++) {
            // 這個變量純粹為了掩飾到底哪個倒霉先被干掉。
            final String criminal = "第"+i+"個毒販";
            Runnable task = new Runnable() {
                @Override
                public void run() {
                    try {
                        // 如果當前已經沒有可以毒販,立刻返回
                        start.await();
                        Thread.sleep(500);
                        System.out.println(criminal + "被干掉了!");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } finally {
                        // 干掉一個。毒販活著的數量就減1
                        end.countDown();
                    }
                }
            };
            executorService.submit(task);
        }

        // 抓捕開始
        start.countDown();
        //  全都被干掉了(計數器為0)
        end.await();
        // 任務完成:收工回家
        executorService.shutdown();
    }
}

閉鎖可以延遲線程的進度直到其到達終止狀態,閉鎖可以用來確保某些活動直到其他活動都完成才繼續執行:

確保某個計算在其需要的所有資源都被初始化之后才繼續執行;

確保某個服務在其依賴的所有其他服務都已經啟動之后才啟動;

等待直到某個操作所有參與者都準備就緒再繼續執行。

喜歡就關注我吧

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/75765.html

相關文章

  • 并發

    摘要:表示的是兩個,當其中任意一個計算完并發編程之是線程安全并且高效的,在并發編程中經常可見它的使用,在開始分析它的高并發實現機制前,先講講廢話,看看它是如何被引入的。電商秒殺和搶購,是兩個比較典型的互聯網高并發場景。 干貨:深度剖析分布式搜索引擎設計 分布式,高可用,和機器學習一樣,最近幾年被提及得最多的名詞,聽名字多牛逼,來,我們一步一步來擊破前兩個名詞,今天我們首先來說說分布式。 探究...

    supernavy 評論0 收藏0
  • 并發

    摘要:表示的是兩個,當其中任意一個計算完并發編程之是線程安全并且高效的,在并發編程中經常可見它的使用,在開始分析它的高并發實現機制前,先講講廢話,看看它是如何被引入的。電商秒殺和搶購,是兩個比較典型的互聯網高并發場景。 干貨:深度剖析分布式搜索引擎設計 分布式,高可用,和機器學習一樣,最近幾年被提及得最多的名詞,聽名字多牛逼,來,我們一步一步來擊破前兩個名詞,今天我們首先來說說分布式。 探究...

    ddongjian0000 評論0 收藏0
  • 并發

    摘要:表示的是兩個,當其中任意一個計算完并發編程之是線程安全并且高效的,在并發編程中經常可見它的使用,在開始分析它的高并發實現機制前,先講講廢話,看看它是如何被引入的。電商秒殺和搶購,是兩個比較典型的互聯網高并發場景。 干貨:深度剖析分布式搜索引擎設計 分布式,高可用,和機器學習一樣,最近幾年被提及得最多的名詞,聽名字多牛逼,來,我們一步一步來擊破前兩個名詞,今天我們首先來說說分布式。 探究...

    wangdai 評論0 收藏0
  • Java并發編程CountDownLatch源碼解析

    摘要:一導語最近在學習并發編程原理,所以準備整理一下自己學到的知識,先寫一篇的源碼分析,之后希望可以慢慢寫完整個并發編程。了解了的構造函數之后,我們再來看它的核心代碼,首先是。 一、導語 最近在學習并發編程原理,所以準備整理一下自己學到的知識,先寫一篇CountDownLatch的源碼分析,之后希望可以慢慢寫完整個并發編程。 二、什么是CountDownLatch CountDownLatc...

    arashicage 評論0 收藏0
  • Java多線程編程實戰:模擬大量數據同步

    摘要:所以得出結論需要分配較多的線程進行讀數據,較少的線程進行寫數據。注意多線程編程對實際環境和需求有很大的依賴,需要根據實際的需求情況對各個參數做調整。 背景 最近對于 Java 多線程做了一段時間的學習,筆者一直認為,學習東西就是要應用到實際的業務需求中的。否則要么無法深入理解,要么硬生生地套用技術只是達到炫技的效果。 不過筆者仍舊認為自己對于多線程掌握不夠熟練,不敢輕易應用到生產代碼中...

    elliott_hu 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<