每日一博 - Semaphore使用场景分析以及源码分析

Posted 小小工匠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一博 - Semaphore使用场景分析以及源码分析相关的知识,希望对你有一定的参考价值。


并发编程常用的工具类简介

我们先看并发编程中提供的几个常用的工具类

  • CountDownLatch : CountDownLatch 用于阻塞当前 1 个或多个线程,其目的是让这些线程等待其它线程的执行完成。

    可以简单将其理解为一个计数器,当初始化一个 count=n 的 CountDownLatch 对象之后,需要调用该对象的 CountDownLatch#countDown 方法来对计数器进行减值,直到计数器为 0 的时候,等待该计数器的线程才能继续执行。

    但是需要注意的一点是,执行 CountDownLatch#countDown 方法的线程在执行完减值操作之后,并不会因此而阻塞。真正阻塞等待事件的是调用 CountDownLatch 对象 CountDownLatch#await 方法的线程,该线程一直会阻塞直到计数器计数变为 0 为止。

  • CyclicBarrier :CyclicBarrier 用于阻塞当前多个线程,其目的是让这些线程彼此之间相互等待,当这些线程均到达屏障后再一起往下执行

  • Semaphore:信号量,可以通过控制“许可证”的数量,来保证线程之间的配合

  • Phaser:和CyclicBarrier类似,但计数可变

  • Exchanger :两个线程交换对象

  • Condition : 可以控制线程的“等待”和“唤醒” , Object.wait()的升级版本


Semaphore概述

以上是关于每日一博 - Semaphore使用场景分析以及源码分析的主要内容,如果未能解决你的问题,请参考以下文章

每日一博 - Review线程池_02

每日一博 - 常用负载均衡算法实现

每日一博 - 常用负载均衡算法实现

每日一博 - 延时任务的多种实现方式解读

每日一博 - DelayQueue阻塞队列源码解读

每日一博 - 使用环形队列实现高效的延时消息