博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程之线程的百米赛跑
阅读量:4292 次
发布时间:2019-05-27

本文共 738 字,大约阅读时间需要 2 分钟。

在百米赛跑中,多个参赛队员在听到发令枪响之后,开始跑步,到达终点后结束计时,然后统计各个队员的成绩。而这个在线程中需要考虑两点,第一:发令枪响,这是所有跑步队员(线程)接收到的出发信号,此处涉及到裁判(主线程)如何通知跑步者(子线程)的问题;第二:如何知道所有跑步者完成了赛跑,也就是主线程如何知道子线程已经全部完成,这有很多种实现方法,这边我们使用CountDownLatch工具类来实现。具体看以下代码:

多线程之线程的百米赛跑

跑步者线程

多线程之线程的百米赛跑

运动会开始!

多线程之线程的百米赛跑

平均成绩

CountDownLatch类是一个倒数的同步计数器,在程序中启动了两个计数器,一个是开始计数器begin,表示的是发令枪,另外是结束计数器,这里是有十个,表示的是每个线程的执行情况,也就是跑步者是否跑完比赛。程序的逻辑如下:

  1. 10个线程都开始运行,执行到begin.await()后线程阻塞,等待begin的计数变为0

  2. 主线程调用begin的CountDown方法,是begin的计数器为0

  3. 10个线程继续运行

  4. 主线程继续运行下一个语句,end的计数器不为0,主线程等待

  5. 每个线程运行结束时把end的计数器减1,标志着本线程运行完毕

  6. 10个线程全部结束,end的计数器为0

  7. 主线程继续执行,打印出成绩平均值

CountDownLatch的作用是控制一个计数器,每个线程在运行完毕后会执行CountDown,表示自己运行结束,这对于多个子任务的计算特别有效,比如一个异步任务需要拆分成10个子任务执行,主任务必须要知道子任务是否完成,所有子任务完成后才能进行合并计算,从而保证了一二主任务的逻辑的正确性。这就是CountDownLatch的作用。

谢谢大家的收看~

喜欢的关注一波

转载地址:http://xrwws.baihongyu.com/

你可能感兴趣的文章
linux进程之间通讯常用信号
查看>>
main函数带参数
查看>>
PCB布线技巧
查看>>
关于PCB设计中过孔能否打在焊盘上的两种观点
查看>>
PCB反推理念
查看>>
京东技术架构(一)构建亿级前端读服务
查看>>
git 提示:error: unable to rewind rpc post data - try increasing http.postBuffer
查看>>
php 解决json_encode中文UNICODE转码问题
查看>>
LNMP 安装 thinkcmf提示404not found
查看>>
PHP empty、isset、innull的区别
查看>>
apache+nginx 实现动静分离
查看>>
通过Navicat远程连接MySQL配置
查看>>
phpstorm开发工具的设置用法
查看>>
Linux 系统挂载数据盘
查看>>
Git基础(三)--常见错误及解决方案
查看>>
Git(四) - 分支管理
查看>>
PHP Curl发送数据
查看>>
HTTP协议
查看>>
HTTPS
查看>>
git add . git add -u git add -A区别
查看>>