成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JAVA并發(fā)編程之 - CountDownLatch使用場景分析

yy736044583 / 2624人閱讀

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

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

? 在 java.util.concurrent 包中提供了多種并發(fā)容器類來改進(jìn)同步容器 的性能。今天我們來聊一聊CountDownLatch 的使用場景??纯此降资窃趺赐嫠5摹?/p> CountDownLatch 是干什么的?

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

CountDownLatch原理

? CountDownLatch是通過一個計數(shù)器來實現(xiàn)的,計數(shù)器的初始化值為線程的數(shù)量。每當(dāng)一個線程完成了自己的任務(wù)后,計數(shù)器的值就相應(yīng)得減1。當(dāng)計數(shù)器到達(dá)0時,表示所有的線程都已完成任務(wù),然后在閉鎖上等待的線程就可以恢復(fù)執(zhí)行任務(wù)。

使用場景

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

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

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

        // 開始計數(shù)器
        final CountDownLatch start = new CountDownLatch(1);
        // 結(jié)束計數(shù)器
        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 {
                        // 如果當(dāng)前已經(jīng)沒有可以毒販,立刻返回
                        start.await();
                        Thread.sleep(500);
                        System.out.println(criminal + "被干掉了!");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } finally {
                        // 干掉一個。毒販活著的數(shù)量就減1
                        end.countDown();
                    }
                }
            };
            executorService.submit(task);
        }

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

閉鎖可以延遲線程的進(jìn)度直到其到達(dá)終止?fàn)顟B(tài),閉鎖可以用來確保某些活動直到其他活動都完成才繼續(xù)執(zhí)行:

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

確保某個服務(wù)在其依賴的所有其他服務(wù)都已經(jīng)啟動之后才啟動;

等待直到某個操作所有參與者都準(zhǔn)備就緒再繼續(xù)執(zhí)行。

喜歡就關(guān)注我吧

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75765.html

相關(guān)文章

  • 并發(fā)

    摘要:表示的是兩個,當(dāng)其中任意一個計算完并發(fā)編程之是線程安全并且高效的,在并發(fā)編程中經(jīng)??梢娝氖褂?,在開始分析它的高并發(fā)實現(xiàn)機(jī)制前,先講講廢話,看看它是如何被引入的。電商秒殺和搶購,是兩個比較典型的互聯(lián)網(wǎng)高并發(fā)場景。 干貨:深度剖析分布式搜索引擎設(shè)計 分布式,高可用,和機(jī)器學(xué)習(xí)一樣,最近幾年被提及得最多的名詞,聽名字多牛逼,來,我們一步一步來擊破前兩個名詞,今天我們首先來說說分布式。 探究...

    supernavy 評論0 收藏0
  • 并發(fā)

    摘要:表示的是兩個,當(dāng)其中任意一個計算完并發(fā)編程之是線程安全并且高效的,在并發(fā)編程中經(jīng)??梢娝氖褂?,在開始分析它的高并發(fā)實現(xiàn)機(jī)制前,先講講廢話,看看它是如何被引入的。電商秒殺和搶購,是兩個比較典型的互聯(lián)網(wǎng)高并發(fā)場景。 干貨:深度剖析分布式搜索引擎設(shè)計 分布式,高可用,和機(jī)器學(xué)習(xí)一樣,最近幾年被提及得最多的名詞,聽名字多牛逼,來,我們一步一步來擊破前兩個名詞,今天我們首先來說說分布式。 探究...

    ddongjian0000 評論0 收藏0
  • 并發(fā)

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

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

    摘要:一導(dǎo)語最近在學(xué)習(xí)并發(fā)編程原理,所以準(zhǔn)備整理一下自己學(xué)到的知識,先寫一篇的源碼分析,之后希望可以慢慢寫完整個并發(fā)編程。了解了的構(gòu)造函數(shù)之后,我們再來看它的核心代碼,首先是。 一、導(dǎo)語 最近在學(xué)習(xí)并發(fā)編程原理,所以準(zhǔn)備整理一下自己學(xué)到的知識,先寫一篇CountDownLatch的源碼分析,之后希望可以慢慢寫完整個并發(fā)編程。 二、什么是CountDownLatch CountDownLatc...

    arashicage 評論0 收藏0
  • Java多線程編程實戰(zhàn):模擬大量數(shù)據(jù)同步

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

    elliott_hu 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<