国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JUC并發(fā)編程學(xué)習(xí)筆記(七)常用的輔助類

這篇具有很好參考價(jià)值的文章主要介紹了JUC并發(fā)編程學(xué)習(xí)筆記(七)常用的輔助類。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

常用的輔助類

CountDownLatch

這是一個(gè)JUC計(jì)數(shù)器輔助類,計(jì)數(shù)器有加有減,這是減。

JUC并發(fā)編程學(xué)習(xí)筆記(七)常用的輔助類

使用方法

package org.example.demo;

import java.util.concurrent.CountDownLatch;

//線程計(jì)數(shù)器
public class CountDownLatchDemo {
    public static void main(String[] args) {
        CountDownLatch countDownLatch = new CountDownLatch(6);//總數(shù)為6,必須要執(zhí)行任務(wù)時(shí)用
        for (int i = 0; i < 6; i++) {
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+" go out");
                countDownLatch.countDown();//總數(shù)減1
            },String.valueOf(i)).start();
        }
        try {
            countDownLatch.await();//等待總數(shù)變?yōu)?才會(huì)往下執(zhí)行,相當(dāng)于阻塞當(dāng)前線程
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("關(guān)門");
    }
}

使用前

可能會(huì)在所有人沒出去之前關(guān)門

JUC并發(fā)編程學(xué)習(xí)筆記(七)常用的輔助類

使用后

不在乎誰先出去,但是一定要總數(shù)等于0后才會(huì)關(guān)門

JUC并發(fā)編程學(xué)習(xí)筆記(七)常用的輔助類

原理

countDownLatch.countDown();//總數(shù)減1

countDownLatch.await();//等待總數(shù)變?yōu)?才會(huì)往下執(zhí)行,相當(dāng)于阻塞當(dāng)前線程

每次有線程調(diào)用countDown() 數(shù)量減一,假設(shè)計(jì)數(shù)器變?yōu)?,await()就會(huì)被喚醒,繼續(xù)執(zhí)行!

CyclicBarrier

有減法就有加法

JUC并發(fā)編程學(xué)習(xí)筆記(七)常用的輔助類

使用方法略有不同,一是添加了達(dá)到數(shù)量后可以執(zhí)行一個(gè)方法,二十a(chǎn)wait方法放在了線程的內(nèi)部

package org.example.demo;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class CyclicBarrierDemo {
    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{
            System.out.println("召喚神龍成功");//在達(dá)到數(shù)量后運(yùn)行一個(gè)Runnable接口方法
        });

        for (int i = 1; i <= 7; i++) {
            //lambda表達(dá)式本質(zhì)上還是new了一個(gè)類,所以無法直接拿到for循環(huán)中的變量i,需要通過一個(gè)臨時(shí)變量final來作為一個(gè)中間變量來獲取到i
            final int temp = i;
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+":獲取到了"+temp+"顆龍珠");

                try {
                    cyclicBarrier.await();//每次等待完成后往下執(zhí)行,如果達(dá)不到數(shù)量會(huì)死在這
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                } catch (BrokenBarrierException e) {
                    throw new RuntimeException(e);
                }
            },String.valueOf(i)).start();
        }



    }
}
Semaphore

Semaphore:信號(hào)量

JUC并發(fā)編程學(xué)習(xí)筆記(七)常用的輔助類

搶車位:6輛車3個(gè)車位,123占據(jù)了那么456就需要等待,當(dāng)占據(jù)的車走后,那么等待的車就要進(jìn)入該車位。

用于限流等操作

package org.example.demo;

import java.sql.Time;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

public class SemaphoreDemo {
    public static void main(String[] args) {
//        線程數(shù)量:限流!讓沒有得到的等待釋放
        Semaphore sim = new Semaphore(3);
        for (int i = 0; i < 6; i++) {
            new Thread(()->{
                //acquire 得到
                //release 釋放
                try {
                    sim.acquire();
                    System.out.println(Thread.currentThread().getName()+":搶到車位");
                    TimeUnit.SECONDS.sleep(2);
                    System.out.println(Thread.currentThread().getName()+":離開車位");

                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }finally {//所有需要關(guān)閉、釋放的操作都放在finally中
                    sim.release();
                }


            }).start();
        }
    }
}

sim.acquire();//得到

sim.release();//釋放

作用:多個(gè)共享資源互斥的使用!并發(fā)限流,控制最大線程數(shù)!文章來源地址http://www.zghlxwxcb.cn/news/detail-741787.html

到了這里,關(guān)于JUC并發(fā)編程學(xué)習(xí)筆記(七)常用的輔助類的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JUC并發(fā)編程學(xué)習(xí)筆記(九)阻塞隊(duì)列

    JUC并發(fā)編程學(xué)習(xí)筆記(九)阻塞隊(duì)列

    阻塞 隊(duì)列 隊(duì)列的特性:FIFO(fist inpupt fist output)先進(jìn)先出 不得不阻塞的情況 什么情況下會(huì)使用阻塞隊(duì)列:多線程并發(fā)處理、線程池 學(xué)會(huì)使用隊(duì)列 添加、移除 四組API 方式 拋出異常 不拋出異常,有返回值 阻塞等待 超時(shí)等待 添加 add offer put offer(E e, long timeout, TimeUnit unit) 移

    2024年02月06日
    瀏覽(25)
  • JUC并發(fā)編程學(xué)習(xí)筆記(十九)原子引用

    帶版本號(hào)的原子操作! 解決ABA問題,引入原子引用(樂觀鎖思想) AtomicStampedReference類解決ABA問題 所有相同類型的包裝類對象之間值的比較全部使用equals方法比較 Integer使用了對象緩存機(jī)制,默認(rèn)范圍是-128至127,推薦使用靜態(tài)工廠方法valueOf獲取對象實(shí)例,而不是new,因?yàn)関

    2024年02月05日
    瀏覽(22)
  • JUC并發(fā)編程學(xué)習(xí)筆記(十)線程池(重點(diǎn))

    JUC并發(fā)編程學(xué)習(xí)筆記(十)線程池(重點(diǎn))

    線程池:三大方法、七大參數(shù)、四種拒絕策略 池化技術(shù) 程序的運(yùn)行,本質(zhì):占用系統(tǒng)的資源!優(yōu)化資源的使用!- 池化技術(shù)(線程池、連接池、對象池......);創(chuàng)建和銷毀十分消耗資源 池化技術(shù):事先準(zhǔn)備好一些資源,有人要用就拿,拿完用完還給我。 線程池的好處: 1、

    2024年02月06日
    瀏覽(30)
  • JUC并發(fā)編程學(xué)習(xí)筆記(六)Callable(簡單)

    JUC并發(fā)編程學(xué)習(xí)筆記(六)Callable(簡單)

    callable接口和runnable接口類似,都是為了執(zhí)行另外一條線程而設(shè)計(jì)的,區(qū)別是Runnable不會(huì)返回結(jié)果也不會(huì)拋出異常。 1、可以有返回值 2、可以拋出異常 3、方法不同;run()/call(); Runnable 實(shí)現(xiàn)Runnable接口,重寫run方法,無返回值 Callable 實(shí)現(xiàn)Callable接口,重寫call方法,有返回值,可

    2024年02月06日
    瀏覽(24)
  • JUC并發(fā)編程學(xué)習(xí)筆記(四)8鎖現(xiàn)象

    八鎖-就是關(guān)于鎖的八個(gè)問題 鎖是什么,如何判斷鎖的是誰 對象、class模板 深刻理解鎖 鎖的東西無外乎就兩樣:1、同步方法的調(diào)用者,2、Class模板。 同一個(gè)鎖中,只有當(dāng)前線程資源釋放后才會(huì)被下一個(gè)線程所接手。 同步方法的調(diào)用者是兩個(gè)不同的實(shí)例時(shí),互不相關(guān)。 靜態(tài)

    2024年02月06日
    瀏覽(26)
  • JUC并發(fā)編程學(xué)習(xí)筆記(一)認(rèn)知進(jìn)程和線程

    進(jìn)程 一個(gè)程序,如QQ.exe,是程序的集合 一個(gè)進(jìn)程往往可以包含多個(gè)線程,至少包含一個(gè) java默認(rèn)有兩個(gè)線程,GC垃圾回收線程和Main線程 線程:一個(gè)進(jìn)程中的各個(gè)功能 java無法真正的開啟線程,因?yàn)閖ava是運(yùn)行在虛擬機(jī)上的,所以只能通過C++,通過native本地方法調(diào)用C++開啟線程

    2024年02月06日
    瀏覽(95)
  • JUC并發(fā)編程學(xué)習(xí)筆記(十八)深入理解CAS

    JUC并發(fā)編程學(xué)習(xí)筆記(十八)深入理解CAS

    什么是CAS 為什么要學(xué)CAS:大廠你必須深入研究底層!有所突破! java層面的cas-------compareAndSet compareAndSet(int expectedValue, int newValue) 期望并更新,達(dá)到期望值就更新、否則就不更新! Unsafe類 java不能直接操作內(nèi)存,但是可以調(diào)用c++,c++可以操作內(nèi)存,java可以通過native定義

    2024年02月05日
    瀏覽(27)
  • JUC并發(fā)編程學(xué)習(xí)筆記(二)Lock鎖(重點(diǎn))

    JUC并發(fā)編程學(xué)習(xí)筆記(二)Lock鎖(重點(diǎn))

    傳統(tǒng)的synchronized 傳統(tǒng)的解決多線程并發(fā)導(dǎo)致的一些問題我們會(huì)使用synchronized來解決,synchronized的本質(zhì)就是隊(duì)列、鎖。 Lock的實(shí)現(xiàn)類有:可重復(fù)鎖(最常用)、讀鎖、寫鎖 在創(chuàng)建可重復(fù)鎖時(shí),可傳入boolean類型值來決定該鎖是公平鎖(先來后到)還是非公平鎖(可插隊(duì))

    2024年02月06日
    瀏覽(22)
  • JUC并發(fā)編程學(xué)習(xí)筆記(十二)Stream流式計(jì)算

    JUC并發(fā)編程學(xué)習(xí)筆記(十二)Stream流式計(jì)算

    什么是Stream流式計(jì)算 大數(shù)據(jù):存儲(chǔ)+計(jì)算 集合、MySql這些的本質(zhì)都是存儲(chǔ)東西的; 計(jì)算都應(yīng)該交給流來操作! 一個(gè)案例說明:函數(shù)式接口、lambda表達(dá)式、鏈?zhǔn)骄幊?、Stream流式計(jì)算

    2024年02月05日
    瀏覽(27)
  • JUC并發(fā)編程學(xué)習(xí)筆記(十七)徹底玩轉(zhuǎn)單例模式

    JUC并發(fā)編程學(xué)習(xí)筆記(十七)徹底玩轉(zhuǎn)單例模式

    單例中最重要的思想-------構(gòu)造器私有! 惡漢式、懶漢式(DCL懶漢式?。?惡漢式 懶漢式 DCL懶漢式 完整的雙重檢測鎖模式的單例、懶漢式、DCL懶漢式 但是有反射!只要有反射,任何的代碼都不安全,任何的私有都是擺設(shè) 正常的單例模式: 反射破壞單例: 怎么去解決這

    2024年02月05日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包