CountDownLatch
CountDownLatch
翻译:
倒计时锁存器,,,,count计数,down停止,Latch锁
解释:
- 允许一个或多个线程等待,直到在其他线程中执行的一组操作完成的同步辅助
- 不懂?
- 就是,正常情况下,多线程是同时处于就绪状态,但是,使用了之后,我【线程一】先跑,你们在外面候着
方法

使用
简单使用
public static void main(String[] args) throws InterruptedException {CountDownLatch countDownLatch = new CountDownLatch(10);for (int i = 0; i < 10; i++) {int finalI = i;new Thread(()->{System.out.println(finalI);countDownLatch.countDown();}).start();}countDownLatch.await();System.out.println("结束了");
}
- 在线程里使用,每次减少 1
- await后面的进程需要等到上面的进程执行完毕,才可以执行
问题?
如何使用CountDownLatch使得角色裁判,喊完各就位预备后,发枪,这个两个动作后,运动员才开始跑
需要使用callable接口,而不是runnable接口
复杂使用
裁判类 【Judge】
class Judge implements Callable<String>{private CountDownLatch startCreamLatch;private CountDownLatch startFireLatch;public Judge(CountDownLatch startCreamLatch, CountDownLatch startFireLatch) {this.startCreamLatch = startCreamLatch;this.startFireLatch = startFireLatch;}@Overridepublic String call() throws Exception {scream();this.startCreamLatch.countDown();this.startCreamLatch.await();fire();this.startFireLatch.countDown();this.startFireLatch.await();return "裁判发枪成功";}public void scream (){System.out.println("裁判喊:各就位");}public void fire(){System.out.println("开枪");}
}
- 定义了scream的CountDownLatch 和 fire的 CountDownLatch
- 在主类中分别设置倒计时为1,每次执行完,即可以执行下一个
运动员类【runner】
class Runner implements Callable<String>{private CountDownLatch startLatch;public Runner(CountDownLatch startLatch) {this.startLatch = startLatch;}@Overridepublic String call() throws Exception {this.startLatch.await();run();return Thread.currentThread().getName() + "运动员正在运动";}public void run(){System.out.println(Thread.currentThread().getName()+"运动员跑起来了");}
}
主线程【main】
public class Game{public static void main(String[] args) {CountDownLatch startCreamLatch = new CountDownLatch(1);CountDownLatch startFireLatch = new CountDownLatch(1);Judge judge = new Judge(startCreamLatch,startFireLatch);Runner runner = new Runner(startFireLatch);FutureTask futureTask = new FutureTask(judge);new Thread(futureTask).start();for (int i = 0; i < 8; i++) {FutureTask task = new FutureTask(runner);new Thread(task,"第"+String.valueOf(i)+"运动员").start();}}
}
相关文章:
CountDownLatch
CountDownLatch 翻译: 倒计时锁存器,,,,count计数,down停止,Latch锁 解释: 允许一个或多个线程等待,直到在其他线程中执行的一组操作完成的同步辅助不懂?…...
Vue3中的组合式API与选项式API:深入理解与比较
一、引言 Vue.js,作为前端开发的热门框架之一,以其轻量级、易上手、灵活性强等特点深受开发者的喜爱。随着Vue3的发布,其引入了全新的组合式API(Composition API),这为Vue.js的开发方式带来了新的变革。本…...
接口自动化测试实战之接口概念、项目简介及测试流程问答!
一、前言 这篇文章呢主要是想讲实战方面的内容,本文主要会讲解接口测试中的一些接口概念,流程等方面的问答,同时还会介绍一下即将要进行测试的项目,这里呢我就不多说废话了,直接进入主题吧。 二、接口概念 接口测试&…...
浏览器工作原理与实践--跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性
通过上篇文章的介绍,我们知道了同源策略可以隔离各个站点之间的DOM交互、页面数据和网络通信,虽然严格的同源策略会带来更多的安全,但是也束缚了Web。这就需要在安全和自由之间找到一个平衡点,所以我们默认页面中可以引用任意第三…...
Ubuntu配置VScode的C++环境
在Ubuntu系统下配置C环境,并运行helloworld 1. 下载VScode 我这里使用的是星火应用商店,在商店里面可以直接下载安装 http://spark-app.store/ 2.创建文件夹 3.启动VScode并打开该文件夹 4.安装以下几个扩展 PS:Clang这个插件别安装&…...
使用Code开发Django_模版和CSS
转到定义 和 查看定义 在使用Django或任何其他库的过程中,我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令,可以直接导航到任何代码中的类和其他对象的定义: 转到定义 在Python开发环境中,我们可以轻松地对函数、类或者其他导入模块中的成员使用“Go to Def…...
Llama 3下月正式发布,继续开源!
4月10日,Techcrunch消息,Meta在本周伦敦举办的一场活动中确定,下个月将正式发布Llama 3并且继续开源。 Meta全球事务总裁Nick Clegg表示,我们希望在下个月,甚至更短的时间内,正式推出新一代基础模型Llama …...
有图片转成PDF文件格式的方法吗?分享图片转成PDF文件的方法
将图片转换为PDF文件是一个相对简单的过程,但也需要一定的步骤和注意事项。下面,我将详细介绍如何将图片转换为PDF文件,包括所需的工具、步骤以及可能遇到的问题和解决方案。 首先,我们需要一个能够将图片转换为PDF文件的工具。市…...
数据结构---绪论
一、绪论: 1.什么是数据? 数据是信息的载体,是描述客观事物属性的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 数据元素--描述一个个体 数据元素,数据项&am…...
matlab 安装 mingw64(6.3.0),OPENEXR
matlab安装openexr 1. matlab版本与对应的mingw版本选择2. mingw(6.3.0)下载地址:3. matlab2020a配置mingw(6.3.0)流程“4. matlab 安装openexr方法一:更新matlab版本方法二:其他博文方法方法三…...
最新彩虹知识付费商城源码 V3.4
最新彩虹知识付费商城源码 V3.4,支持二级分类,多级分销,秒杀,砍价,团购,首页继续浏览,分站个人虚拟余额自定义,最新批量对接,批量下载图片,批量替换标题&…...
Redis实现延迟任务的几种方案
🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 1.前言 2.Redis如何实现延迟任务? 3.代码实现 3.1. 过期键通知事…...
一种springboot请求参数校验的实现方案
一、前提引入 很多时候,springboot提供的Restful-api需要根据业务需要进行参数校验,相应的,基于各位码友的习惯,各有各的实现方式,可谓是八仙过海各显神通。 二、常见方案 2.1 一种最原始的方法 通过if语句,对特定参数进行校验 if(null == name){return "name …...
盒子模型+响应式布局 + 原型链与继承
盒子模型 是什么 css布局基础,规定了元素在页面上如何呈现,以及元素之间的空间关系 由content paddingbordermargin四部分组成 为什么 盒子模型分为 标准盒子模型: 元素的宽度与高度 只包括content IE盒子模型: 元素的宽度与高度 包括content,padding,border 在实际操作中…...
面试准备 集合 List
ArrayList 底层实现 使用Object[] 动态数组进行存储 特性 支持存储null值非线程安全支持快速访问 初始化方法 无参–返回一个空的列表(DEFAULTCAPACITY_EMPTY_ELEMENTDATA)指定初始容量: new ArrayList(20);指定集合 new ArrayList(col…...
Java快速入门系列-7(测试与调试)
第七章:测试与调试 第7章:测试与调试7.1 单元测试(JUnit)7.1.1 为什么要进行单元测试7.1.2 JUnit基础7.1.3 断言7.1.4 测试套件7.2 集成测试与系统测试7.2.1 集成测试7.2.2 系统测试7.3 调试技巧与工具7.3.1 断点7.3.2 单步执行7.3.3 变量检查7.3.4 条件断点7.3.5 日志记录…...
算法:双指针
算法:双指针 双指针快慢指针对撞指针总结 双指针 LeetCode 283.移动零 以上题目要求我们把所有0移动到数组的末尾,也就是说,我们要把数组转化为以下状态: [ 非0区域 ] [ 0区域 ] 像这种把一个数组划分为多个区域的题型࿰…...
MySQL一些特殊功能的索引(6/16)
特殊功能性索引 B-Tree索引: InnoDB的默认索引类型,适用于多种查询操作。 可以用于等值查询、范围查询和索引列的组合查询。 创建B-Tree索引的示例: CREATE INDEX index_name ON table_name (column1, column2);全文索引(FULLTEX…...
ES11-12
1-ES11-Promise.allSettled Promise.allSettled0)方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的promise结果。 简单来说不管成功失败都会调用.then(),然后处理成功和失败的结果 const promises [ …...
【学习笔记】Vue3源码解析:第三部分-获取computed的值;实现computed
课程地址:【已完结】全网最详细Vue3源码解析!(一行行带你手写Vue3源码) 第三部分-获取computed的值;实现computed:(对应课程的第18-21节) 第22节:《获取computed的值》 …...
Pixel Aurora Engine真实作品:支持物理位移反馈的UI交互+生成图联动演示
Pixel Aurora Engine真实作品:支持物理位移反馈的UI交互生成图联动演示 1. 像素极光创意引擎介绍 Pixel Aurora Engine(像素极光引擎)是一款融合AI生成技术与复古游戏美学的创意工具。这款"虚拟游戏机"采用8-bit像素风格界面&…...
C语言函数返回值的设计哲学与实践
1. C语言函数返回值的本质与设计哲学在嵌入式开发领域摸爬滚打十几年,我见过太多因为函数返回值设计不当导致的"血案"。记得刚入行时调试一个串口通信模块,就因为误判了第三方库的返回值逻辑,整整浪费了两天时间。C语言的函数返回值…...
Windows任务栏美化完全指南:打造个性化桌面体验
Windows任务栏美化完全指南:打造个性化桌面体验 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Windows任务栏美化是许多用户…...
小白必看:霜儿-汉服-造相Z-Turbo从部署到出图全流程解析
小白必看:霜儿-汉服-造相Z-Turbo从部署到出图全流程解析 1. 镜像简介与核心优势 霜儿-汉服-造相Z-Turbo是一款专为汉服写真生成优化的AI模型镜像,基于Xinference框架部署,通过Gradio提供简洁易用的Web界面。与通用文生图模型相比࿰…...
千问3.5-9B提示词工程:优化OpenClaw任务拆解质量
千问3.5-9B提示词工程:优化OpenClaw任务拆解质量 1. 为什么需要优化提示词 去年冬天第一次用OpenClaw自动整理会议纪要时,我被它的"耿直"气笑了——让它"提取关键结论",结果给我返回了整段录音的文字版,连&…...
SEO_本地中小企业快速见效的SEO操作指南(345 )
SEO:本地中小企业快速见效的SEO操作指南 在当今数字化时代,本地中小企业如何在竞争激烈的市场中脱颖而出,是每一个企业主都需要面对的问题。本文将从多个角度为你详细解析如何通过SEO(搜索引擎优化)让本地中小企业迅速见效。 问…...
电池包结构仿真与力学分析指南
电池包结构仿真,电池包力学仿真,电池包CAE分析,新能源电池电池CAE分析,结构仿真,力学分析附带相对应的模型文件,指导书,可直接自己跟着做分析另外附赠完整电池包模型一、概述随着新能源汽车的飞速发展&…...
ai辅助cad开发:让快马平台的kimi模型帮你思考和编写参数化设计代码
AI辅助CAD开发:让快马平台的Kimi模型帮你思考和编写参数化设计代码 最近在做一个参数化齿轮生成器的项目,发现用传统方式开发效率很低。后来尝试用InsCode(快马)平台的AI辅助功能,整个过程变得轻松多了。这里分享下我的开发经验,…...
聚焦18650电池点焊机:新能源产业焊接环节的核心设备
在新能源产业高速发展的当下,18650锂电池凭借其高能量密度、长循环寿命及稳定性能,成为电动汽车、储能系统、便携电子设备等领域的核心动力源。作为电池组装环节的关键设备,18650单节自动点焊机通过精密的焊接技术,将电池极耳与镍…...
硬件解放:开源工具突破设备限制的深度探索指南
硬件解放:开源工具突破设备限制的深度探索指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当你的设备被厂商贴上"过时"标签&#x…...
