多线程并发控制,线程执行计数器CyclicBarrier与CountDownLatch

多线程并发控制CountDownLatch和CyclicBarrier和Semaphore 多线程并发控制CountDownLatch和CyclicBarrier和Semaphore,检索,智能问答 阅读详情

CountDownLatch 倒计时锁存器

CountDownLatch,其实就是一个计数器来,初始值为线程的数量。每执行一个线程,计数器减1,当计数器到达0时,即所有的线程都执行结束,恢复主线程执行任务。

package com.chengjiang.common.core.countDownLatch;

import java.util.concurrent.*;

/**
 * 多线程并发控制工具 CountDownLatch 测试
 *
 * @author zhao-cj
 */
public class CountDownLatchDemo {

    public static void main(String[] args) {

        // 线程数
        int threadNum = 10;

        CountDownLatch countDownLatch = new CountDownLatch(threadNum);

        ExecutorService service = new ThreadPoolExecutor(5, 10, 0L, TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<Runnable>(30));

        for (int i = 0; i < threadNum; i++) {
            service.submit(() -> {
                try {
                    System.out.println("Thread " + Thread.currentThread().getName() + " is performing computation.");
                    Thread.sleep(2000L);
                    System.out.println("Thread " + Thread.currentThread().getName() + " has completed computation.");

                    countDownLatch.countDown();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }

        try {
            countDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            service.shutdown();
        }

        System.out.println("所有子线程执行结束,开始后续工作....");
        
    }
}

CyclicBarrier 循环屏障

CyclicBarrier 可以理解为循环栅栏,也就是说这个计数器可以循环反复使用。如果我们将计数器设置为 10 ,那么湊齐第一批 10 个线程后,计数器就会归零,接着凑齐下一批 10 个线程,这就是循环栅栏内在的含义。

package com.chengjiang.common.core.cyclicBarrier;

import java.util.concurrent.*;

/**
 * 多线程并发控制工具 CyclicBarrier 测试 
 *
 * @author zhao-cj
 */
public class CyclicBarrierDemo {

    public static void main(String[] args) {

        // 总任务数
        int totalThreadNum = 9;

        // 单次循环任务数
        int threadNum = 3;

        // 线程池
        ExecutorService service = new ThreadPoolExecutor(threadNum, 20, 0L, TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<Runnable>(30));

        // 线程执行计数器
        CyclicBarrier cyclicBarrier = new CyclicBarrier(threadNum + 1, () -> {
            System.out.println("单次循环内子线程执行结束,开始后续工作....");
        });

        // 开始执行任务
        for (int i = 1; i <= totalThreadNum; i++) {
            service.execute(() -> {
                try {
                    System.out.println("Thread " + Thread.currentThread().getName() + " is performing computation.");
                    Thread.sleep(2000L);
                    System.out.println("Thread " + Thread.currentThread().getName() + " has completed computation.");

                    // 告知计数器,已执行
                    cyclicBarrier.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            });

            if (i % threadNum == 0) {
                try {
                    cyclicBarrier.await();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        service.shutdown();
    }
}

CyclicBarrier与CountDownLatch的区别:

  1. CyclicBarrier比CountDownLatch稍微复杂
  2. 两者构造参数不同:CyclicBarrier比CountDownLatch多一个两个参数的构造函数
  3. 两者初始值不同:CyclicBarrier比CountDownLatch的初始值参数大1,原因是CyclicBarrier.await()除了在子线程中调用外还要调用一次。
  4. 两者计数规则不同:CyclicBarrier的计数是调用await()的次数,CountDownLatch的计数是调用countDown()的次数;
  5. 两者使用次数不同:CyclicBarrier可以循环使用,而CountDownLatch不是循环使用的。
陀螺仪选型避坑指南:为什么IMU660RA是智能车竞赛的性价比之选? 本文针对智能车竞赛场景,提供陀螺仪选型避坑指南,并深度解析为何IMU660RA成为性价比之选。文章指出,竞赛选型应避免盲目追求高性能“黑盒”模块,而应注重原始数据获取与算法开发。IMU660RA以其良好的常温稳定性、适中的噪声水平、极致的性价比和丰富的生态支持,成为帮助参赛者深入理解姿态解算原理、进行“白盒开发”的理想教学与实践平台。 阅读详情

相关推荐

【SAP PO】SAP PO 接口配置完整教程之二REST服务对接

SAP PO 接口配置完整教程之二REST服务对接

XLevon的博客 1万+

java多线程 计数_Java多线程系列——计数器 CountDownLatch

简介:CountDownLatch 是一个非常实用的多线程控制工具类,通常用来控制线程的等待,它可以让某个线程等待直到倒计时结束CountDownLatch 提供了两个主要的方法,await()、countDown()。await:使当前线程阻塞,等待计数器为 0countDown:计数器减一,计数为零时,释放所有在等待的线程实例:public class CountDownLatchDemo i...

weixin_34413326的博客 1997

matlab中高频变压器怎么找,干货|手把手教你绕制高频变压器

原标题:干货|手把手教你绕制高频变压器绕制一个变压器所需材料:磁芯、骨架、各种铜线、麦拉胶带。变压器参数:磁芯:EE22原边:134T(1-3脚),辅助:32T(5-4脚),输出:15T(10-9脚)原边电感:1380±10%uH漏感:≤44uH引脚分布图: 特别注意:绕制方法为网上下载,其中变压器绕制方法是对的,但其中存在着很多问题(比如,正规变压器的绕组的头和尾是要添加铁氟龙套管的,每一层之间...

weixin_30895121的博客 2123

Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执行...

Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执行 Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执行 Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执行 Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本...

weixin_30391339的博客 148

AI大模型应用性能核心指标:TTFT 与 TPOT 详解

这两个指标专门衡量大模型流式响应性能,是评估用户体验的关键指标。· 是什么:从请求到第一个输出的等待时间· 为什么重要:决定用户的第一印象和响应感知· 优化方向:模型加载、预处理、冷启动优化· 行业标准:最好<500ms,可接受<1.5s· 是什么:每个输出token的平均生成时间· 为什么重要:决定流式输出的流畅度和总完成时间· 优化方向:推理引擎、内存带宽、批处理优化· 行业标准:最好<50ms/token,可接受<100ms/token在Dify/大模型应用中的意义。

lovehu6686的博客 3942

深入解析CycloneDDS跨域通信中的XML配置文件优化策略

本文深入解析了CycloneDDS跨域通信中XML配置文件的优化策略,重点介绍了网络接口配置、多播设置、性能调优参数及复杂场景下的配置案例。通过实战技巧和调试方法,帮助开发者在SoC环境中实现高效稳定的跨域通信,提升系统性能。

soda5的博客 688

Java多任务多线程,总线程数countDownLatch限制模板(附源码)

Java多任务多线程,总线程数countDownLatch限制模板(附源码)

cucgyfjklx的博客 1万+

用STM32F103单片机控制电调制动无刷电机

用电调控制无刷电机制作遥控飞艇 蓝牙控制 调控电调 无刷电机 用电调控制无刷电机制作遥控飞艇 代码区 mian.c #include "delay.h" #include "sys.h" #include "usart.h" #include "usart3.h" #include "timer.h" #include "led.h" #include "key.h" int main(v...

子非鱼 的博客 2万+

Java并发--线程计数器

Java中经常存在以下的需求,启动多个相同或者不同的线程,主线程需要等待所有的线程执行完才继续往下执行要实现上面的需求,基本的思路: 创建一个计数器, 来记录线程的执行有两种实现方法方法1:使用锁和计数器:需要有一个对象锁,作用一:保证这个计数器的线程安全,作用二:阻塞主线程,等待所有线程执行完再来唤醒主线程继续执行方法2:使用Java线程包中的CountDownLatch:不需要加锁, 不需要w...

yayaqwl的博客 1153

杰理SDK UART 使用教程

本文介绍了JL701n芯片的UART串口通信使用教程,重点讲解了UART2的初始化配置、数据收发和中断处理功能。教程详细说明了代码结构、核心功能函数、配置参数和使用步骤,包括UART初始化、数据发送和接收中断处理等关键操作。同时提供了完整的API接口说明和注意事项,强调了中断处理限制、缓冲区管理、引脚配置等重要细节。最后给出了基本使用流程和高级任务处理示例,并针对常见问题提供了故障排除建议。本教程适用于需要在JL701n芯片上实现可靠串口通信的开发者。

qq_42014563的博客 1817

【实战项目开发技术分享】机器人安全通过狭窄区域的方案

在机器人的应用领域中,有时会遇到需要机器人通过狭窄区域的情况。无论是室内还是室外,机器人需要具备适应性和灵活性,以便在狭窄的空间中进行安全、高效的导航。本文将提供一些如何让机器人通过狭窄区域的实现方案和思路,希望帮助读者可以根据实际的开发需要进行适当调整和扩展。

xiewf的博客 2万+

并发编程应用场景_并发编程之CountDownLatch原理与应用

作者公众号:一角钱技术(org_yijiaoqian)前言控制并发流程的工具类,作用就是帮助我们程序员更容易的让线程之间合作,让线程之间相互配合来满足业务逻辑。比如让线程A等待线程B执行完毕后再执行等合作策略。控制并发流程的工具类主要有:简介背景CountDownLatch是在Java1.5被引入,跟它一起被引入的工具类还有CyclicBarrier、Semaphore、Concurrenthas...

weixin_33308577的博客 294

【DaVinci Developer专题】-41-APP SWC如何读取写入NVM Block数据

APP SWC Port如何Read读取/Write写入NVM Block数据; DaVinci Developer中的Calibration Parameter/Per-Instance Memory/Service Need如何配置。

「汽车电子助手」的博客 4468

Java计数器之CountDownLatch、CyclicBarrier、Semaphore

Java计数器之CountDownLatch、CyclicBarrier、Semaphore 在Java里面有几种可以用于控制线程状态的方法,如CountDownLatch计数器、CyclicBarrier循环栅栏、Sempahore信号量。下面就分别演示下他们的使用方法: CountDownLatch CountDownLatch可以实现多线...

xingoo 143

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

常用的辅助类---CountDownLatch、CyclicBarrier、Semaphore

1.CountDownLatch(减法计数器) 2.CyclicBarrier(加法计数器) 3.Semaphore(信号量) 1.CountDownLatch(减法计数器) //计数器 //相当于一个房子内有6个人,必须等到6个人都走完才可以锁门 public class CountDownLatchDemo { public static void main(String[]...

Sweet77 327

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

CountDownLatch&CyclicBarrier

https://mp.weixin.qq.com/s/VFjNie_CeDqecrckv_aHcQ

竹林幽深 103

Java并发编程中的同步器

1. CyclicBarrier【参考文献】 和 CountDownLatch 类似 线程会等待,直到足够多线程达到了事先规定的数据。一旦触发条件,就可以进行下一步的操作 适用于线程之间相互等待处理结果就绪的场景 CyclicBarrier 可以构造一个集结点,当某一个线程执行完毕,它就会到集结点等待,直到所有线程都到了集结点,那么该栅栏就会被撤销,所有线程再统一出发,继续执行剩下的任务 用法一:等待所有人到达指定地点,再统一出发 import java.util.concurrent.BrokenBa

xxsiyao的博客 440

多线程控制工具类CountDownLatch/CyclicBarrier

CountDownLatch CountDownLatch是一个多线程控制工具类,这个工具类用来控制线程等待,它可以让某一个线程等待直到倒计时结束,再开始执行。 (1)CountDownLatch的构造函数 publicCountDownLatch(int count) CountDownLatch的构造函数接收一个整数作为参数,即为当前这个计数器的计数个数。 (2)CountDownLatch类中的方法 1)public void await() throws InterruptedExce.

mudisheng0202的博客 357

Java并发基础:CountDownLatch和CyclicBarrier

CountDownLatch概括 CountDownLatch能够使一个线程在等待其他一个或多个线程执行结束之后,再继续执行。 使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后在CountDownLatch上等待的线程就可以恢复执行任务。 CountDownLatch用法 例子:假设现...

sdfsfaf的博客 204

多线程计数器:countdowlatch 和 cyclicbarrier 的内部原理和用法

例子 1.CountDownLatch:多线程计数器(减计数),初始值代表需要首先执行完成的线程个数,当CountDownLatch countDown(不阻塞线程)为0时,被阻塞(await)的线程才会被唤醒。一个线程等待其他多个线程完成一件事,才可以继续执行。只能使用一次。应用启动时,主线程等待其他线程执行完成。 2.CyclicBarrier:多线程计数器(加计数),初始值代表需要首先执...

PLA12147111的博客 817

java线程计数器

CountDownLatch、CyclicBarrer、Semaphore 用法

u010519674的专栏 1467

CountDownLatch与CyclicBarrier简单用法

CountDownLatch简单用法 代码开发中经常遇到这样的场景:某几个任务执行完成后主线程再继续向下执行,其实实现这个功能非常简单下面列出两种方式。 代码如下:示例1 import java.util.concurrent.CountDownLatch; public class CountDownLaunchDemo { public static void main(Str...

wangbaobisheng的博客 225

Java并发编程之CyclicBarrier、CountDownLatch和Semaphore

Java并发编程之CyclicBarrier、CountDownLatch和Semaphore 同步屏障指的是: 让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。

handy周 747

Java并发| CountDownLatch、Semaphore和CyclicBarrier

CountDownLatch CountDownLatch是一个计数器闭锁,通过它可以完成类似于阻塞当前线程的功能,即:一个线程或多个线程一直等待,直到其他线程执行的操作完成。当计数器值减至零时,所有因调用await()方法而处于等待状态的线程就会继续往下执行。这种现象只会出现一次,计数器不能被重置。 package com.xiaobu.JUC; import java.util.conc...

小布1994的博客 285

java JUC 的CountDownLatch,Semaphore,CyclicBarrier的使用

java JUC 的CountDownLatch,Semaphore,CyclicBarrier起源CountDownLatch的使用CyclicBarrierSemaphore 起源 一直都只了解过countdownlatch,近期在看redission 实现分布式锁的实现的时候发现了Semaphore。 CountDownLatch的使用 package com.example.springbootmbplus.demo; import java.util.concurrent.CountDownLa

qq_36936290的博客 291

Java并发工具类(二)CyclicBarrier

Java并发工具类(二)CyclicBarrier 在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有: CountDownLatch Semaphore Exchanger CyclicBarrier CyclicBarrier 概念 当有多个线程同时去访问的时候,会发生阻塞,直到最后一个线程达到屏障时,程序才会继续执行。 实现...

java界的小学生 755

Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

转载:https://www.cnblogs.com/dolphin0520/p/3920397.html  在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。   以下是本文目录大纲:   一.CountDownLatch用法   二.Cycli...

weixin_41399911的博客 155
上一篇: Linux常用命令整理
下一篇: JAVA面试篇(一)一JAVA基础
star_falling
博客等级 码龄11年 287粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值