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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JUC常用辅助类

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JUC常用辅助类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

常用輔助類(必會!!)

CountDownLatch

發音:康特擋辣起

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

原理:

  • 數量減1
  • 等待計數器歸零假設
  • 每次有現成調用countDown() 數量 -1,假設計數器變為0, countDownLatch.await() 就會被喚醒,繼續執行!

    CyclicBarrier

    發音:賽課理科拜日也

    1.加法計數器
    代碼示例

    package com.add;import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.CyclicBarrier;/*** 集齊7顆龍珠召喚神龍* <p>* 加法計數器,集齊顆,才能召喚,也就是7個步驟一定都走完了,才能走到最后一步*/ 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++) {//如果要在函數表達式里面使用則要用final 修飾final int temp = i;//lambda 能操作到 i 嗎? 不能,要通過一個final 修飾的變量來賦值new Thread(() -> {System.out.println(Thread.currentThread().getName() + "收集" + temp + "個龍珠");try {cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}}).start();}} }

    Semaphore

    Semaphore 發音:samefour
    意思:信號量,相當于一個通行證

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

    package com.add;import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit;public class SemaphoreDemo {public static void main(String[] args) {//參數默認線程數,停車位! 限流的時候我們可能會用到,也就是線程只會進來3個,不能多了。Semaphore semaphore = new Semaphore(3);//我們要有6個車進來for (int i = 1; i <=6; i++) {new Thread(()->{//acquire() 得到//首先我第一個車進來要得到一個停車位try {semaphore.acquire();//我要打印下當前哪個線程拿到了這個車位System.out.println(Thread.currentThread().getName()+"搶到車位");//這個車停下來了,肯定要停一段時間,假設是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(); //獲得,假設已經滿了,等待,等待被釋放為止!
    semaphore.release();// 釋放,會將當前的信號量釋放+1,喚醒等待的線程!
    作用:多個共享資源互斥的作用!,并發限流,控制最大線程的線程數!

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。