juc的辅助类
countdownlatch
* 由尾開始計算
* 用一個程序計數器CountDownLatch,每執行完成一個線程,調用countDown()使計數器減一,主線程中使用countDownLatch的await()方法等待
使用程序計數器:
import java.util.concurrent.CountDownLatch;public class JunitMultiThreadTest { private int i = 5; /* * 線程計數器 * 將線程數量初始化 * 每執行完成一條線程,調用countDown()使計數器減1 * 主線程調用方法await()使其等待,當計數器為0時才被執行 */ private CountDownLatch latch = new CountDownLatch(i); @Test public void test() throws InterruptedException {for (int i = 0; i < this.i; i ++) {new Thread(new Runner(),"JUNIT多線程測試").start();}try {latch.await(); // 主線程等待} catch (InterruptedException e) {e.printStackTrace();} } class Runner implements Runnable {@Overridepublic void run() {System.out.println("【當前線程ID】:"+Thread.currentThread().getId());latch.countDown(); // 執行完畢,計數器減1}} }cyclicBarrier
- 由頭開始計算
- 每開始一個線程 cyclicbarrier就加一,知道達到創建時所設定的線程,cyclicBarrier才開始執行內部的線程
semaphore
在信號量上我們定義了兩種操作:
- acquire(獲取操作)當一個線程調用acquire操作時,它要么通過成功獲取信號量(信號量減一),要么一直等待下去,直到有線程釋放信號量
- release(釋放操作)實際上會將信號量的值加1,然后喚醒等待的線程
目的:
- 用于多個共享資源的互斥作用
- 用于并發線程數的控制
總結
- 上一篇: Win10下WinRAR“拒绝访问”解决
- 下一篇: Pug 介绍和在 Vue 中使用