JUC —— 常用辅助类
生活随笔
收集整理的這篇文章主要介紹了
JUC —— 常用辅助类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
CountDownLatch
允許一個或多個線程等待直到在其他線程中執行的一組操作完成的同步輔助(減法計數器)
//計數器 public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {//計數器總數是6,必須要執行任務的時候再使用CountDownLatch countDownLatch = new CountDownLatch(6);//模擬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("關門");} }執行結果:
1 GO OUT 2 GO OUT 3 GO OUT 4 GO OUT 5 GO OUT 6 GO OUT 關門CyclicBarrier
允許一組線程全部等待彼此達到共同屏障點的同步輔助,循環阻塞在涉及固定大小的線程方的程序中很有用,這些線程必須偶爾等待彼此,屏障被稱為循環,因為它可以在等待的線程被釋放之后重新使用(加法計數器)
public class CyclicBarrierTest {public static void main(String[] args) {/*** 集齊7顆龍珠召喚神龍*/CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{System.out.println("集齊7顆,召喚神龍");});for (int i = 1; i <= 7 ; i++) {int temp = i;new Thread(()->{System.out.println("收集第"+temp+"顆龍珠");try {cyclicBarrier.await(); //等待執行到對應次數的線程才執行cyclicBarrier中的} catch (Exception e) {e.printStackTrace();}}).start();}} }執行結果:
收集第2顆龍珠 收集第1顆龍珠 收集第3顆龍珠 收集第4顆龍珠 收集第6顆龍珠 收集第5顆龍珠 收集第7顆龍珠 集齊7顆,召喚神龍Semaphore
一個計數信號量,在概念上,信號量維持一組許可證,如果有必要,每個acquire()都會阻塞,直到許可證可用,然后才能使用它。每個release()添加許可證,潛在地釋放阻塞獲取方。但是,沒有使用實際的許可證對象,Semaphore只保留可用輸了的計數,并相應地執行(信號量)
public class SemaphoreTest {public static void main(String[] args) {//線程數量Semaphore semaphore = new Semaphore(3);//有三輛車,搶6個停車位for (int i = 1; i <=6 ; i++) {new Thread(()->{try {//acquire() 得到semaphore.acquire();System.out.println(Thread.currentThread().getName()+"搶到車位停車");TimeUnit.SECONDS.sleep(2);System.out.println(Thread.currentThread().getName()+"離開車位");//release() 釋放semaphore.release();} catch (InterruptedException e) {e.printStackTrace();}},String.valueOf(i)).start();}} }執行結果:
3搶到車位停車 4搶到車位停車 1搶到車位停車 4離開車位 1離開車位 3離開車位 2搶到車位停車 5搶到車位停車 6搶到車位停車 5離開車位 6離開車位 2離開車位作用:多個共享資源互斥使用。并發限流,控制最大的線程數
總結
以上是生活随笔為你收集整理的JUC —— 常用辅助类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pug 编译html,pug之HTML模
- 下一篇: java中Graphics类的使用