首页 > 其他 > 详细

并发工具类

时间:2019-09-21 20:22:02      阅读:105      评论:0      收藏:0      [点我收藏+]

使用同步工具类

闭锁

在线程执行过程中用一把锁把门锁住,在开锁之前线程无法通过这道门,只有当满足了开锁的条件之后,锁才会自动打开。

常用的闭锁工具类:CountDownLatch、CyclicBarrier、FutureTask。

闭锁应用场景

1.有a、b、c三个线程一起执行,可是a线程需要等待b、c线程任务执行完毕才继续往下执行。

2.一个线程的某步计算依赖于其它线程的执行结果。

用生活例子举例,小明约小张和小李吃饭,小明先到了,可是要等到小张和小李都到齐才能开始点菜吃饭,小明到饭店后等待小张小李到齐的这个步骤就是一个闭锁,小张和小李到齐是闭锁的两个开锁条件,只有满足了开锁条件,才能够继续点菜吃饭,否则只能干坐着等待。

技术分享图片
输出结果:
技术分享图片

以上demo便完成了一个闭锁的使用,十分简单。CyclistBarrier的使用也和上面十分相似。

信号量

主要用来控制并发量,也可以用来实现指定长度的队列。

下面用Semaphore来实现一个多线程变单线程的例子。

这是一个线程不安全的计数demo,由于多线程线程并发执行时的cpu执行时序影响,结果十分混乱。

技术分享图片

技术分享图片

可以用Semaphore使这个计数任务变成串行执行,把并发量设为1,同时只有一个线程执行计数操作。
技术分享图片

由于是单线程执行,自然就不存在线程安全问题了。(当然不推荐用这种方式解决线程安全问题,只是用来演示信号量工具类Semaphore的用法)

技术分享图片

并发工具类

原文:https://www.cnblogs.com/powerjiajun/p/11564169.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!