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

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

d0fdb2e70e1847b2b9749789048967d3.png

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


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

  • 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概述

相关文章
|
5月前
|
Java 调度
10分钟从源码级别搞懂AQS(AbstractQueuedSynchronizer)
10分钟从源码级别搞懂AQS(AbstractQueuedSynchronizer)
|
数据采集 Java
Java线程池使用场景和方法分析
Java线程池使用场景和方法分析
83 0
每日一博 - CountDownLatch使用场景分析以及源码分析
每日一博 - CountDownLatch使用场景分析以及源码分析
99 0
|
机器学习/深度学习 安全 Java
java并发原理实战(10)--AQS 和公平锁分析
java并发原理实战(10)--AQS 和公平锁分析
119 0
java并发原理实战(10)--AQS 和公平锁分析
|
Java
Java多线程优化之线程池的使用方法
Java多线程优化之线程池的使用方法
148 0
|
人工智能 安全 小程序
java并发高频面试题:Sempahore的使用场景与常见误区
java并发高频面试题:Sempahore的使用场景与常见误区
java并发高频面试题:Sempahore的使用场景与常见误区
|
安全 Java 容器
Java并发编程 - 线程不安全类 & 同步/并发容器之简介
Java并发编程 - 线程不安全类 & 同步/并发容器之简介
105 0
Java并发编程 - 线程不安全类 & 同步/并发容器之简介
|
监控 Java BI
硬核干货:4W字从源码上分析JUC线程池ThreadPoolExecutor的实现原理(下)
本文着重分析ThreadPoolExecutor#execute()的实现,笔者会从实现原理、源码实现等角度结合简化例子进行详细的分析。ThreadPoolExecutor的源码从JDK8到JDK11基本没有变化,本文编写的时候使用的是JDK11。
178 0
|
Java BI API
硬核干货:4W字从源码上分析JUC线程池ThreadPoolExecutor的实现原理(上)
本文着重分析ThreadPoolExecutor#execute()的实现,笔者会从实现原理、源码实现等角度结合简化例子进行详细的分析。ThreadPoolExecutor的源码从JDK8到JDK11基本没有变化,本文编写的时候使用的是JDK11。
178 0
硬核干货:4W字从源码上分析JUC线程池ThreadPoolExecutor的实现原理(上)
线程的3种实现方式并深入源码简单分析实现原理(3)
线程的3种实现方式并深入源码简单分析实现原理(3)
132 0
线程的3种实现方式并深入源码简单分析实现原理(3)