CountDownLatch add example demo

This commit is contained in:
duandazhi 2022-08-03 23:09:30 +08:00
parent 570295d2bc
commit 24517f1403

View File

@ -4,6 +4,8 @@ import java.lang.Thread.UncaughtExceptionHandler;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Phaser;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
@ -272,11 +274,45 @@ public class ThreadUtil {
/**
* 新建一个CountDownLatch一个同步辅助类在完成一组正在其他线程中执行的操作之前它允许一个或多个线程一直等待
*
* @param threadCount 线程数量
* 示例等6个同学都离开教室班长才能锁门
* <pre>{@code
* CountDownLatch latch = new CountDownLatch(6); // 总共任务是6
* for (int x = 0; x < 6; x++) {
* //具体生产任务可以用线程池替换
* new Thread(()->{
* try {
* //每个同学在角色待上5秒钟
* TimeUnit.SECONDS.sleep(5);
* } catch (InterruptedException e) {
* e.printStackTrace();
* }
* System.out.printf("【%s】同学已经离开了教室%n", Thread.currentThread().getName());
* latch.countDown(); // 减1每离开一个同学减去1
* },"同学 - " + x).start();
* }
* latch.await(); // 等待计数为0后再解除阻塞等待所有同学离开
* System.out.println("【主线程】所有同学都离开了教室,开始锁教室大门了。");
* }
* </pre>
*
* @param taskCount 任务数量
* @return CountDownLatch
*/
public static CountDownLatch newCountDownLatch(final int threadCount) {
return new CountDownLatch(threadCount);
public static CountDownLatch newCountDownLatch(final int taskCount) {
return new CountDownLatch(taskCount);
}
/**
* 新建一个Phaser一个同步辅助类jdk1.7提供可以完全替代CountDownLatch
*
* Pharser: 移相器相位器可重用同步屏障
* 功能可以替换{@link CyclicBarrier}固定线程循环栅栏{@link CountDownLatch}固定计数倒数计数加上分层功能
*
* @param taskCount 任务数量
* @return Phaser
*/
public static Phaser newPhaser(final int taskCount) {
return new Phaser(taskCount);
}
/**