日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JUC常用辅助类

發(fā)布時(shí)間:2023/12/18 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JUC常用辅助类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

常用輔助類(必會(huì)!!)

CountDownLatch

發(fā)音:康特?fù)趵逼?br />

package com.add;import java.util.concurrent.CountDownLatch;//計(jì)數(shù)器 +1/*** 場景:放學(xué)后6個(gè)學(xué)生走完后,才關(guān)門!!!! 保證了所有的人都走了,不會(huì)關(guān)在里面*/ public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {//倒計(jì)時(shí)總數(shù)是6//應(yīng)用場景,必須要執(zhí)行任務(wù)的時(shí)候,再使用!CountDownLatch countDownLatch = new CountDownLatch(6);for (int i = 1; i <=6; i++) {new Thread(()->{//打印出誰走了System.out.println(Thread.currentThread().getName()+"Go out");countDownLatch.countDown();//數(shù)量-1},String.valueOf(i)).start();}countDownLatch.await();//等待計(jì)數(shù)器歸零,然后再向下執(zhí)行System.out.println("Close DOOR");} }

原理:

  • 數(shù)量減1
  • 等待計(jì)數(shù)器歸零假設(shè)
  • 每次有現(xiàn)成調(diào)用countDown() 數(shù)量 -1,假設(shè)計(jì)數(shù)器變?yōu)?, countDownLatch.await() 就會(huì)被喚醒,繼續(xù)執(zhí)行!

    CyclicBarrier

    發(fā)音:賽課理科拜日也

    1.加法計(jì)數(shù)器
    代碼示例

    package com.add;import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.CyclicBarrier;/*** 集齊7顆龍珠召喚神龍* <p>* 加法計(jì)數(shù)器,集齊顆,才能召喚,也就是7個(gè)步驟一定都走完了,才能走到最后一步*/ public class CyclicBarrierDemo {//召喚龍珠的線程private static CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> {System.out.println("召喚神龍成功");});//public static void main(String[] args) {for (int i = 1; i <= 7; i++) {//如果要在函數(shù)表達(dá)式里面使用則要用final 修飾final int temp = i;//lambda 能操作到 i 嗎? 不能,要通過一個(gè)final 修飾的變量來賦值new Thread(() -> {System.out.println(Thread.currentThread().getName() + "收集" + temp + "個(gè)龍珠");try {cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}}).start();}} }

    Semaphore

    Semaphore 發(fā)音:samefour
    意思:信號(hào)量,相當(dāng)于一個(gè)通行證

    舉個(gè)例子
    搶車位:
    6車子–3個(gè)停車位置
    123
    456
    代碼案例:

    package com.add;import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit;public class SemaphoreDemo {public static void main(String[] args) {//參數(shù)默認(rèn)線程數(shù),停車位! 限流的時(shí)候我們可能會(huì)用到,也就是線程只會(huì)進(jìn)來3個(gè),不能多了。Semaphore semaphore = new Semaphore(3);//我們要有6個(gè)車進(jìn)來for (int i = 1; i <=6; i++) {new Thread(()->{//acquire() 得到//首先我第一個(gè)車進(jìn)來要得到一個(gè)停車位try {semaphore.acquire();//我要打印下當(dāng)前哪個(gè)線程拿到了這個(gè)車位System.out.println(Thread.currentThread().getName()+"搶到車位");//這個(gè)車停下來了,肯定要停一段時(shí)間,假設(shè)是2sTimeUnit.SECONDS.sleep(1);System.out.println(Thread.currentThread().getName()+"離開車位");} catch (InterruptedException e) {e.printStackTrace();}finally {//release() 釋放semaphore.release();}},String.valueOf(i)).start();}}}

    原理:
    semaphore.acquire(); //獲得,假設(shè)已經(jīng)滿了,等待,等待被釋放為止!
    semaphore.release();// 釋放,會(huì)將當(dāng)前的信號(hào)量釋放+1,喚醒等待的線程!
    作用:多個(gè)共享資源互斥的作用!,并發(fā)限流,控制最大線程的線程數(shù)!

    總結(jié)

    以上是生活随笔為你收集整理的JUC常用辅助类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。