生活随笔
收集整理的這篇文章主要介紹了
JUC常用辅助类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
常用輔助類(必會!!)
CountDownLatch
發音:康特擋辣起
package com.add;import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {public static void main(String[] args
) throws InterruptedException {CountDownLatch countDownLatch
= new CountDownLatch(6);for (int i
= 1; i
<=6; i
++) {new Thread(()->{System.out
.println(Thread.currentThread().getName()+"Go out");countDownLatch
.countDown();},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;
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 int temp
= i
;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
) {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(1);System.out
.println(Thread.currentThread().getName()+"離開車位");} catch (InterruptedException e
) {e
.printStackTrace();}finally {semaphore
.release();}},String.valueOf(i
)).start();}}}
原理:
semaphore.acquire(); //獲得,假設已經滿了,等待,等待被釋放為止!
semaphore.release();// 釋放,會將當前的信號量釋放+1,喚醒等待的線程!
作用:多個共享資源互斥的作用!,并發限流,控制最大線程的線程數!
總結
以上是生活随笔為你收集整理的JUC常用辅助类的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。