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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

7.JUC 三大辅助类

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

7.JUC 三大輔助類

?JUC提供了三種常用的輔助類,通過這些輔助類可以很好的解決線程數量過多Lock鎖的頻繁操作。這三種輔助類為:

  • CountDownLatch:減少計數

  • Cyclicbarrier:循環柵欄

  • Semaphore:信號燈

7.1 減少計數CountDownLatch

?CountDownLatch類可以設置一個計數器,然后通過countDown方法來進行減1操作,使用await方法等待計數不大于0,然后繼續執行await方法之后的語句。

  • CountDownLatch主要有兩個方法,當一個或多個線程調用await方法時,這些線程會阻塞。
  • 其他線程調用countDown方法會將計數器減1(調用countDown方法的線程不會阻塞)。
  • 當計數器的值變為0時,因await方法阻塞的線程會被喚醒,繼續執行。

場景:6個同學陸續離開教師后值班同學才可以關門。

/*** CountDownLatch Demo*/ public class CountDownLatchDemo {/*** 6個陸續離開教師之后,班長鎖門*/public static void main(String[] args) throws InterruptedException {// 創建CountDownLathc 對象,設置初始值CountDownLatch countDownLatch = new CountDownLatch(6);// 6個同學陸續離開教室之后for (int i = 0; i < 6; i++) {new Thread(() -> {System.out.println(Thread.currentThread().getName() + "號同學離開教室");// 計數減一countDownLatch.countDown();}, String.valueOf(i)).start();}// 等待countDownLatch.await();System.out.println(Thread.currentThread().getName() + "班長鎖門走人了");} }

7.2 循環柵欄CyclicBarrier

CycliBarrier看英文單詞可以看出大概就是循環阻塞的意思,在使用Cyclicbarrier的構造方法第一個參數是目標障礙述,每次執行Cyclicbarrier一次障礙數會加一,如果達到目標障礙數,才會執行cyclicBarrier.await() 之后的語句??梢詫yclicBarrier理解為加1操作。

場景:集齊七顆七龍珠

/*** 集齊七顆龍珠,就可以召喚神龍*/ public class CyclicBarrierDemo {/*** 創建固定值*/private static final int NUMBER = 7;public static void main(String[] args) {// 創建 CyclicBarrierCyclicBarrier cyclicBarrier = new CyclicBarrier(NUMBER, () -> {System.out.println("集齊7顆龍珠可以召喚神龍");});// 集齊七課龍珠過程for (int i = 1; i <= 7; i++) {new Thread(() -> {try {System.out.println(Thread.currentThread().getName() + "星龍珠被收集到了");// 等待cyclicBarrier.await();} catch (Exception e) {e.printStackTrace();}}, String.valueOf(i)).start();}} }

7.3 信號燈Semaphore

?Semaphore 的構造方法中傳入的第一個參數是最大信號量(可以看成最大線程池),每個信號量初始化未一個最多只能分發一個許可證,使用acquire方法獲得許可證,release方法釋放許可。

/*** 6 輛汽車,停3個車位*/ public class SemaphoreDemo {public static void main(String[] args) {// 創建Semaphore,設置許可數量Semaphore semaphore = new Semaphore(3);for (int i = 1; i <= 6; i++) {new Thread(() -> {try {// 搶占車位semaphore.acquire();System.out.println(Thread.currentThread().getName() + "搶到車位");// 設置隨機時間TimeUnit.SECONDS.sleep(new Random().nextInt(5));System.out.println(Thread.currentThread().getName() + "------離開的車位");} catch (Exception e) {e.printStackTrace();} finally {// 釋放semaphore.release();}},String.valueOf(i)).start();}} }

總結

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

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