NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 设计模式

  • 开发规范

  • 经验分享

  • 记录

  • 快速开始

  • 笔记

    • 多线程与并发

      • 前言
      • 理论基础
      • Java中各种锁的概念
      • 关键字:synchronized
      • 关键字:volatile
      • 关键字:final
      • Java多线程 - 线程池
      • Java多线程 - Block Queue阻塞队列
      • Java多线程 - 辅助类
        • CountDownLatch 减少计数
        • CyclicBarrier 循环栅栏
        • Semaphore 信号灯
        • Phaser 移相器
      • Java多线程 - CompletableFuture
      • Java多线程 - 线程变量传递ThreadLocal
    • JDK

    • Java集合

    • Spring

    • JVM

    • Other

  • 面试题

  • 微服务

  • 踩过的坑

  • Java
  • 笔记
  • 多线程与并发
NipGeihou
2022-02-14
目录

Java多线程 - 辅助类

# CountDownLatch 减少计数

场景:多线程处理完成后统计

缺点:初始化计数量后不能调整,不适用于未知任务数的多线程作业

点击查看
        ExecutorService executorService = Executors.newFixedThreadPool(2);
        // 初始化计数数量
        CountDownLatch countDownLatch = new CountDownLatch(5);
        
        for (int i = 0; i < 5; i++) {
            System.out.println(i);
            executorService.submit(() -> {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally {
                    // 线程结束时减少
                    countDownLatch.countDown();
                }
            });
        }

        try {
            // 阻塞等待减少至0
            countDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("完成");

# CyclicBarrier 循环栅栏

todo

# Semaphore 信号灯

todo

# Phaser 移相器

CountDownLatch 的增强版,可用于不能提前确定任务总数量的情况

点击查看
    @Test
    void phaserTest() {

        ExecutorService executorService = Executors.newFixedThreadPool(2);
        Phaser phaser = new Phaser();

        for (int i = 0; i < 5; i++) {
            // 注册
            phaser.register();
            executorService.submit(() -> {
                try {
                    System.out.println(Thread.currentThread().getName());
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    // 注销
                    phaser.arriveAndDeregister();
                }

            });
        }

        // 阻塞直至所有注册注销
        phaser.arriveAndAwaitAdvance();

        System.out.println("完成");
    }

参考:理解 Java 并发工具类 Phaser - 云 + 社区 - 腾讯云 (opens new window)

上次更新: 2022/12/31, 03:04:26
Java多线程 - Block Queue阻塞队列
Java多线程 - CompletableFuture

← Java多线程 - Block Queue阻塞队列 Java多线程 - CompletableFuture→

最近更新
01
Docker Swarm
04-18
02
安全隧道 - gost
04-17
03
Solana最佳实践
04-16
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式