您的位置:首页 > 其它

概念:CountDownLatch、CyclicBarrier、Semaphore,以及guava的RateLimiter

2017-09-08 20:07 507 查看
概念

CountDownLatch:一个门闩,作用是将某个线程关在门外,等门里的人分赃完毕(计数为0)的时候,才会打开门,让外面的那个线程执行。

CyclicBarrier:直译的话,就是循环障碍。貌似有人忽略了循环这个关键。其作用就是凑齐N个线程,然后一起继续执行;没凑齐怎么办?一起等着呗。注意,是每凑齐N个线程,而不是一次性的。

Semaphore:信号量,直译很难理解。作用是限定只有抢到信号的线程才能执行,其他的都得等待!你可以设置N个信号,这样最多可以有N个线程同时执行。注意,其他的线程也在,只是挂起了。

RateLimiter:这货是guava的,直译是速率限制器。其作用是 限制一秒内只能有N个线程执行,超过了就只能等待下一秒。注意,N是double类型。

然后,有人叫问了,Semaphore和FixedThreadPool不是一样的吗?都是让N个线程先执行,有什么区别?

当然有区别啦:


Semaphore只是让其他线程挂起而已,不是阻止其他线程的启动;而FixedThreadPool则只有N个线程,其他的线程压根不存在。

那你启动了线程,完全可以做点准备工作,然后挂起,等拿到信号之后继续执行。线程池就不行啦。



代码放到码云上了,有兴趣的点我

说明:


这是个人测试专用的项目,就是测试各种知识点;

本篇涉及的测试代码在guava-test模块、jdk-test模块中。

注释什么的比较随意,见谅。



我一直认为,概念比源码重要,因为理解了概念,就很容易看懂源码。

ps:多线程这玩意平时很少用到,但面试必问,个人觉得也挺好,人和人之间的差距就是通过细节上积累出来的(神级人物除外),否则都是简单的知识,大家都一样,那凭什么用你?

更何况,很少用不代表不用,临时抱佛脚可是容易出问题的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: