CountDownlatch、CyclicBarrier、Semaphore使用介绍

一、CountDownlatch(多线程通信计数器实现多个线程的协同工作)

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class CountDownLatchTest {public static void main(String[] args) {ExecutorService executor = Executors.newFixedThreadPool(3);CountDownLatch count = new CountDownLatch(3);executor.execute(() -> {try {findBy三方();} catch (InterruptedException e) {throw new RuntimeException(e);}count.countDown();});executor.execute(() -> {try {findByMySQL();} catch (InterruptedException e) {throw new RuntimeException(e);}count.countDown();});executor.execute(() -> {try {findBy服务();} catch (InterruptedException e) {throw new RuntimeException(e);}count.countDown();});try {count.await();System.out.println("汇总结束");} catch (InterruptedException e) {throw new RuntimeException(e);}}public static void findBy三方() throws InterruptedException {Thread.sleep(700);}public static void findByMySQL() throws InterruptedException {Thread.sleep(200);}public static void findBy服务() throws InterruptedException {Thread.sleep(300);}
}

二、CyclicBarrier(与CountDownlatch不同的是可以重复使用)

import java.util.concurrent.*;public class CyclicBarrierTest {public static void main(String[] args) {ExecutorService executor = Executors.newFixedThreadPool(3);CyclicBarrier cyclicBarrier = new CyclicBarrier(3, () -> {System.out.println("汇总完毕");});executor.execute(() -> {try {findBy三方();cyclicBarrier.await();} catch (InterruptedException | BrokenBarrierException e) {throw new RuntimeException(e);}});executor.execute(() -> {try {findByMySQL();cyclicBarrier.await();} catch (InterruptedException | BrokenBarrierException e) {throw new RuntimeException(e);}});executor.execute(() -> {try {findBy服务();cyclicBarrier.await();} catch (InterruptedException | BrokenBarrierException e) {throw new RuntimeException(e);}});cyclicBarrier.reset();}public static void findBy三方() throws InterruptedException {Thread.sleep(700);System.out.println("查询完三方");}public static void findByMySQL() throws InterruptedException {Thread.sleep(200);System.out.println("查询完MySQL");}public static void findBy服务() throws InterruptedException {Thread.sleep(300);System.out.println("查询完b服务");}
}

三、Semaphore(信号量,控制线程执行的数量)

import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;public class SemaphoreTest {public static void main(String[] args) {Semaphore sem = new Semaphore(2);for (int i = 0; i < 3; i++) {new Thread(() -> {try {sem.acquire();System.out.println(Thread.currentThread() + "I get it");TimeUnit.SECONDS.sleep(3);System.out.println(Thread.currentThread() + "I release it");} catch (InterruptedException e) {throw new RuntimeException(e);} finally {sem.release();}}).start();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1552645.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

隐马尔可夫模型在股市预测中的应用

隐马尔可夫模型在股市预测中的应用 原创 QuantML QuantML 2024年09月29日 21:44 Content 摘要 股市因其复杂多变的特性&#xff0c;预测未来股价一直是一个挑战。然而&#xff0c;运用高级方法可以显著提高股价预测的准确性。隐马尔可夫模型&#xff08;Hidden Markov Mode…

常用的Java安全框架

Spring Security&#xff1a; 就像Java安全领域的“瑞士军刀”&#xff0c;功能全面且强大。 支持认证、授权、加密、会话管理等安全功能。 与Spring框架无缝集成&#xff0c;使用起来特别方便。 社区活跃&#xff0c;文档丰富&#xff0c;遇到问题容易找到解决方案。 Apach…

python中的find函数怎么用

Python find() 方法检测字符串中是否包含子字符串 str &#xff0c;如果指定 beg&#xff08;开始&#xff09; 和 end&#xff08;结束&#xff09; 范围&#xff0c;则检查是否包含在指定范围内&#xff0c;如果包含子字符串返回开始的索引值&#xff0c;否则返回-1。 语法 …

嵌入式 DAC基础知识

DAC 基本原理 DAC&#xff08;Digital-to-Analog Canverter&#xff09;&#xff0c;指数字/模拟转换器。可将数字量转换为成比例的模拟电压或电流。举个例子&#xff0c;计算机可能产生范围从 00000000 到 11111111 的数字输出&#xff0c;DAC 将其转换为范围从 0 到 10V 的电…

Docker 安装 Citus 单节点集群:全面指南与详细操作

Docker 安装 Citus 单节点集群&#xff1a;全面指南与详细操作 文章目录 Docker 安装 Citus 单节点集群&#xff1a;全面指南与详细操作一 服务器资源二 部署图三 安装部署1 创建网络2 运行脚本1&#xff09;docker-compose.cituscd1.yml2&#xff09;docker-compose.cituswk1.…

zabbix7.0创建自定义模板的案例详解(以监控httpd服务为例)

前言 服务端配置 链接: rocky9.2部署zabbix服务端的详细过程 环境 主机ip应用zabbix-server192.168.10.11zabbix本体zabbix-client192.168.10.12zabbix-agent zabbix-server(服务端已配置) 创建模板 模板组直接写一个新的&#xff0c;不用选择 通过名称查找模板&#xf…

Oracle架构之数据库备份和RAC介绍

文章目录 1 数据库备份1.1 数据库备份分类1.1.1 逻辑备份与物理备份1.1.2 完全备份/差异备份/增量备份 1.2 Oracle 逻辑备份1.2.1 EXP/IMP1.2.1.1 EXP导出1.2.1.2 EXP关键字说明1.2.1.3 导入1.2.1.4 IMP关键字说明 1.2.2 EXPDP/IMPDP1.2.2.1 数据泵介绍1.2.2.2 数据泵的使用 1.…

机器智能的自主分级与人、机、环境有关

自主分级是指机器智能在特定任务中根据自身能力、环境变化及人类需求&#xff0c;自动调整其操作和决策水平的能力。随着人工智能技术的不断发展&#xff0c;机器智能的自主分级成为了研究的热点&#xff0c;尤其是在自动驾驶、智能制造和人机协作等领域。自主分级不仅可以提高…

【ios】---swift开发从入门到放弃

swift开发从入门到放弃 环境swift入门变量与常量类型安全和类型推断print函数字符串整数双精度布尔运算符数组集合set字典区间元祖可选类型循环语句条件语句switch语句函数枚举类型闭包数组方法结构体 环境 1.在App Store下载Xcode 2.新建项目&#xff08;可以先使用这个&…

数据结构-4.1.特殊矩阵的压缩存储

一.一维数组的存储结构&#xff1a; 1.知道一维数组的起始地址&#xff0c;就可以求出任意下标对应的元素所在的地址&#xff1b; 2.注&#xff1a;如果数组下标从1开始&#xff0c;上述公式的i就要改为i-1&#xff1b; 3.数组里的元素类型相同&#xff0c;因此所占空间也相同…

转码第 188 天-高德算法实习面经分享

最近已有不少大厂都在秋招宣讲了&#xff0c;也有一些在 Offer 发放阶段。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新人如何快速入门算法岗、如何准备面试攻略、面试常考点、大模型项目落地经验分享等热门话题进行了深入的讨论。…

嵌入式 ADC基础知识

在现实世界中&#xff0c;常见的信号大都是模拟量&#xff0c;像温度、声音、气压等&#xff0c;但在信号的处理与传输中&#xff0c;为了减少噪声的干扰&#xff0c;较多使用的是数字量。因此我们经常会将现实中的模拟信号&#xff0c;通过 ADC 转换为数字信号进行运算、传输、…

6.2 微服务 负载均衡 架构模式 分类和应用实践

微服务 负载均衡 架构模式 分类 目录概述需求&#xff1a; 设计思路实现思路分析1.1. 微服务架构概述2.2. 负载均衡概念3.3. 负载均衡架构模式3.1 客户端负载均衡 架构模式 要点3.2 服务器端负载均衡 架构模式3.3 代理负载均衡 架构模式 4.4.负载均衡算法3.4 DNS负载均衡 架构模…

通信工程学习:什么是FTP文件传输协议

FTP&#xff1a;文件传输协议 FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是一种用于在网络上交换文件的协议&#xff0c;它定义了文件传输时使用的命令和响应。作为最古老的互联网协议之一&#xff0c;FTP至今仍被广泛使用&#xff0c;并在网…

PCL 投影滤波器

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 投影滤波 2.1.2 可视化 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xff09; 一、…

算法课习题汇总(3)

循环日程表 设有N个选手进行循环比赛&#xff0c;其中N2M&#xff0c;要求每名选手要与其他N−1名选手都赛一次&#xff0c;每名选手每天比赛一次&#xff0c;循环赛共进行N−1天&#xff0c;要求每天没有选手轮空。 例如4个人进行比赛&#xff1a; 思路&#xff1a; 把表格…

20道面试题001

常考语法就是指针&#xff0c;指针与数组、指针与字符串、指针与结构体、指针与函数之间的关系与使用&#xff0c; 以上课为准&#xff0c;辅助《深度理解C指针》这本书。 1. 指针与数组 定义: 数组名在表达式中通常被视为指向数组首元素的指针。 访问元素: 可以通过指针访问数…

递归函数设计技巧

目录 1.路飞吃桃子的问题--应试难度 2.弹簧板问题--应试难度 3.递归实现指数型枚举--校招难度 4.递归实现组合型枚举--校招难度 5.递归实现排列型枚举--校招难度 1.路飞吃桃子的问题--应试难度 我们可以说下两个案例&#xff0c;反正是最后一天的时候&#xff0c;只剩下了一…

pnpm在monorepo架构下不能引用其他模块的问题

一、研究背景 monorepo架构项目目录结构&#xff1a; - common- index.ts- ... - main- index.ts- ... - web- vue-demo- ... pnpm在monorepo架构下使用以下命令 pnpm -F main add common # or pnpm --filter main add common 并不能在main/index.ts中使用common/index.ts…

从概念到使用全面了解Llama 3 这个迄今为止最强大的开源模型

概述 mate最近发布了 Llama3&#xff0c;下一代最先进的开源大语言模型&#xff08;LLM&#xff09;。正如本文的综合评论所述&#xff0c;Llama 3 以其前身奠定的基础为基础&#xff0c;旨在增强 Llama 2 成为 ChatGPT 重要开源竞争对手的能力 Llama 2&#xff1a;深入探讨 C…