首页 > 其他分享 >多线程面试——CountDownLatch,CyclicBarrier,Semaphore

多线程面试——CountDownLatch,CyclicBarrier,Semaphore

时间:2023-03-20 17:33:52浏览次数:28  
标签:CyclicBarrier Semaphore 线程 CountDownLatch 多线程 等待

0.总结
1.CountDownLatch是1个线程等待其他线程,CyclicBarrier是多个线程相互等待;
2.CountDownLatch是计数-1,直到减为0,CyclicBarrier是计数+1,直到达到指定值;
3.CountDownLatch是一次性的,CyclicBarrier是循环使用的;
4.CyclicBarrier可以在最后一个线程到达后,选择1执行1个优先操作;
5.Semaphore,需要拿到锁才能执行,并且可以选择公平、非公平的模式

 

1.CountDownLatch——基于AQS实现
它是一个同步辅助器,允许一个或多个线程一直等待,直到一组在其他线程执行的操作全部完成。

2.CyclicBarrier—基于Reentrantlock实现

一组线程会互相等待,直到所有线程都到达一个同步点
* 就像一群人被困到了一个栅栏前面,只有等最后一个人到达之后,他们才可以合力把栅栏(屏障)突破。

 

3.Semaphore信号量

Semaphore 信号量,用来控制同一时间,资源可被访问的线程数量,一般可用于流量的控制。

标签:CyclicBarrier,Semaphore,线程,CountDownLatch,多线程,等待
From: https://www.cnblogs.com/fulaien/p/17237087.html

相关文章

  • 尚硅谷_宋红康_第10章_多线程
    第10章_多线程讲师:尚硅谷-宋红康(江湖人称:康师傅)官网:http://www.atguigu.com本章专题与脉络我们之前学习的程序在没有跳转语句的情况下,都是由上至下沿着一条路径依......
  • JUC 常用 4 大并发工具类 CountDownLatch、CyclicBarrier、Semaphore、ExChanger
    文章目录​​什么是JUC?​​​​4大常用并发工具类​​​​CountDownLatch​​​​CyclicBarrier​​​​Semaphore​​​​Exchanger​​什么是JUC?JUC就是java.util.concu......
  • Python 多进程、多线程对比(转载)
    https://www.runoob.com/w3cnote/python-single-thread-multi-thread-and-multi-process.html具体实验见原文,这里只是引用实验结果,方便查询......
  • 多线程
    多线程线程的创建Thread类自定义线程类继承Thread类重写run()方法,编写线程执行体创建线程对象,调用start()方法启动线程publicclassDemo01extendsThread{p......
  • Java多线程开发CompletableFuture的应用
    ​做Java编程,难免会遇到多线程的开发,但是JDK8这个CompletableFuture类很多开发者目前还没听说过,但是这个类实在是太好用了,了解它的一些用法后相信你会对它爱不释手(呸渣男,......
  • 外界参数控制多线程队列进行与否
    业务场景,最近遇到个需求,就是通过点击开始/继续要控制任务进度,刚开始想到了线程wait,notify本人是个比较懒得人,一想到要写那么多代码空值,要等待,唤醒,睡眠啥的就觉得麻烦,出......
  • CAS 是一种什么样的同步机制?多线程下为什么不使用 int 而使用 AtomicInteger?
    CompareAndSwap,比较交换。可以看到synchronized可以保证代码块原子性,很多时候会引起性能问题,volatile也是个不错的选择,但是volatile不能保证原子性,只能在某些场合下使......
  • CountDownLatch 和 CyclicBarrier 的区别?
    CyclicBarrier它允许一组线程互相等待,直到到达某个公共屏障点(CommonBarrierPoint)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时CyclicBarrier......
  • 多线程篇-交替打印
    背景有如下需求:线程1打印5次a,线程2打印5次b,线程3打印5次c,要求最后的结果是abcabcabcabc步骤简单情况先考虑简单的情况,然后进行拓展。简单版需求:线程1打印1,线程2......
  • Day 17 17.3 多线程实现之线程池
    多线程实现之线程池1引入系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互。在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量......