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

資訊專欄INFORMATION COLUMN

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

yy736044583 / 2619人閱讀

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

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

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

CountDownLatch 是干什么的?

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

CountDownLatch原理

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

使用場(chǎng)景

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

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

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

        // 開始計(jì)數(shù)器
        final CountDownLatch start = new CountDownLatch(1);
        // 結(jié)束計(jì)數(shù)器
        final CountDownLatch end = new CountDownLatch(10);

        final ExecutorService executorService = Executors.newFixedThreadPool(10);

        for (int i = 1; i <= 10; i++) {
            // 這個(gè)變量純粹為了掩飾到底哪個(gè)倒霉先被干掉。
            final String criminal = "第"+i+"個(gè)毒販";
            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 {
                        // 干掉一個(gè)。毒販活著的數(shù)量就減1
                        end.countDown();
                    }
                }
            };
            executorService.submit(task);
        }

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

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

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

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75765.html

相關(guān)文章

  • 并發(fā)

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

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

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

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

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

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

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

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

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

    elliott_hu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<