概念

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

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

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

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

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

当然有区别啦:

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

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

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

说明:

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

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

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

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

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

更何况,很少用不代表不用,临时抱佛脚可是容易出问题的。

概念:CountDownLatch、CyclicBarrier、Semaphore,以及guava的RateLimiter的更多相关文章

  1. CountDownLatch/CyclicBarrier/Semaphore 使用过吗?

    CountDownLatch/CyclicBarrier/Semaphore 使用过吗?下面详细介绍用法: 一,(等待多线程完成的)CountDownLatch  背景; countDownLatch ...

  2. 并发包下常见的同步工具类详解(CountDownLatch,CyclicBarrier,Semaphore)

    目录 1. 前言 2. 闭锁CountDownLatch 2.1 CountDownLatch功能简介 2.2 使用CountDownLatch 2.3 CountDownLatch原理浅析 3.循环 ...

  3. Java并发编程工具类 CountDownLatch CyclicBarrier Semaphore使用Demo

    Java并发编程工具类 CountDownLatch CyclicBarrier Semaphore使用Demo CountDownLatch countDownLatch这个类使一个线程等待其他线程 ...

  4. 并发包下常见的同步工具类(CountDownLatch,CyclicBarrier,Semaphore)

    在实际开发中,碰上CPU密集且执行时间非常耗时的任务,通常我们会选择将该任务进行分割,以多线程方式同时执行若干个子任务,等这些子任务都执行完后再将所得的结果进行合并.这正是著名的map-reduce思 ...

  5. 高并发第十单:J.U.C AQS(AbstractQueuedSynchronizer) 组件:CountDownLatch. CyclicBarrier .Semaphore

    这里有一篇介绍AQS的文章 非常好: Java并发之AQS详解 AQS全名:AbstractQueuedSynchronizer,是并发容器J.U.C(java.lang.concurrent)下lo ...

  6. 并发工具类的使用 CountDownLatch,CyclicBarrier,Semaphore,Exchanger

    1.CountDownLatch 允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助. A CountDownLatch用给定的计数初始化. await方法阻塞,直到由于countDo ...

  7. CountDownLatch/CyclicBarrier/Semaphore

    CountDownLatch 概念 让一些线程阻塞直到另一些线程完成一系列操作才被唤醒 CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,调用线程就会被阻塞.其它线程调 ...

  8. Java中的4个并发工具类 CountDownLatch CyclicBarrier Semaphore Exchanger

    在 java.util.concurrent 包中提供了 4 个有用的并发工具类 CountDownLatch 允许一个或多个线程等待其他线程完成操作,课题点 Thread 类的 join() 方法 ...

  9. CountDownLatch CyclicBarrier Semaphore 比较

    document CountDownLatch A synchronization aid that allows one or more threads to wait until a set of ...

  10. 多线程中 CountDownLatch CyclicBarrier Semaphore的使用

    CountDownLatch 调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行.也可以传入时间,表示时间到之后,count还没有为0的时候,就会继续执行. package ...

随机推荐

  1. iptables防火墙与日志系统配合使用 监控服务器特点端口的防问源IP

    /etc/sysconfig/iptables -A INPUT -p tcp --dport 80 -j LOG --log-level 5 --log-prefix "PORT_80:& ...

  2. cannot send list of active checks to [ZabbixServerIp]: host [Zabbix server] not found

    解决办法 因为web端上被监控端的主机名和zabbix_agentd.conf中的Hostname名字不一样,改为一样的即可 注意发现问题一定要看日志: tail -f /var/log/zabbix ...

  3. 使用IntelliJ IDEA搭建kafka源码环境时遇到Output path错误解决办法

    kafka源码环境搭建好之后,需要在IntelliJ IDEA开发工具中以debug方式启动kafka服务器来测试消息的生产和消费. 但是在启动kafka.Kafka类中的main方法(也就是运行 k ...

  4. vue2.0的contextmenu右键菜单

    1.事情对象 <!DOCTYPE html> <html> <head> <title></title> <meta charset= ...

  5. CSS实现:标题两侧画线效果

    如图: html代码: <div class="detail-news"> <h5 class="detail-news-title"> ...

  6. LeetCode: Sum Root to Leaf Numbers 解题报告

    Sum Root to Leaf Numbers Given a binary tree containing digits from 0-9 only, each root-to-leaf path ...

  7. 06-老马jQuery教程-jQuery高级

    1.jQuery原型对象解密 jQuery里面的大部分API都是在jQuery的原型对象上定义的.jQuery源码中对原型对象做了简写的处理.也就是说:jQuery.fn === jQuery.pro ...

  8. 2. EM算法-原理详解

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 概率 ...

  9. 一个实体对象不能由多个 IEntityChangeTracker 实例引用。

    错误代码 public bool addSubOptionItem(csModel.cs_Answer answers) { bool result = false; wpe = new csWeiP ...

  10. struts工作原理不错的解释___

    Struts 使用 Model 2 架构.Struts 的ActionServlet 控制导航流.其他Struts 类,比如Action, 用来访问业务逻辑类.当 ActionServlet 从容器接 ...