每日一博 - 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概述

相关文章
|
6月前
|
Java 调度
【多线程面试题十四】、说一说synchronized的底层实现原理
这篇文章解释了Java中的`synchronized`关键字的底层实现原理,包括它在代码块和方法同步中的实现方式,以及通过`monitorenter`和`monitorexit`指令以及`ACC_SYNCHRONIZED`访问标志来控制线程同步和锁的获取与释放。
|
7月前
|
存储 安全 Java
Java面试题:Java内存管理、多线程与并发框架:一道综合性面试题的深度解析,描述Java内存模型,并解释如何在应用中优化内存使用,阐述Java多线程的创建和管理方式,并讨论线程安全问题
Java面试题:Java内存管理、多线程与并发框架:一道综合性面试题的深度解析,描述Java内存模型,并解释如何在应用中优化内存使用,阐述Java多线程的创建和管理方式,并讨论线程安全问题
73 0
每日一博 - CountDownLatch使用场景分析以及源码分析
每日一博 - CountDownLatch使用场景分析以及源码分析
132 0
JUC并发编程学习1:JUC概述、进程线程概述
JUC就是工具类,java.util.concurent的缩写。用来开发并发编程的工具包。 JUC是一个处理线程的工具包,JDK1.5开始出现的。
JUC并发编程学习1:JUC概述、进程线程概述
|
安全 算法 Java
Java并发编程系列之三JUC概述
上篇文章为解决多线程中出现的同步问题引入了锁的概念,上篇文章介绍的是Synchronized关键字锁,本篇文章介绍更加轻量级的锁Lock接口及引出JUC的相关知识。
Java并发编程系列之三JUC概述
|
人工智能 安全 小程序
java并发高频面试题:Sempahore的使用场景与常见误区
java并发高频面试题:Sempahore的使用场景与常见误区
java并发高频面试题:Sempahore的使用场景与常见误区
|
安全 Java 容器
Java并发编程 - 线程不安全类 & 同步/并发容器之简介
Java并发编程 - 线程不安全类 & 同步/并发容器之简介
127 0
Java并发编程 - 线程不安全类 & 同步/并发容器之简介
线程的3种实现方式并深入源码简单分析实现原理(3)
线程的3种实现方式并深入源码简单分析实现原理(3)
152 0
线程的3种实现方式并深入源码简单分析实现原理(3)
线程的3种实现方式并深入源码简单分析实现原理(2)
线程的3种实现方式并深入源码简单分析实现原理(2)
124 0
线程的3种实现方式并深入源码简单分析实现原理(2)
|
Java 数据安全/隐私保护
面试中的 ThreadLocal 原理和使用场景
相信大家不管是在网上做题还是在面试中都经常被问过 ThreadLocal 的原理和用法,虽然一直知道这个东西的存在但是一直没有好好的研究一下原理,没有自己的知识体系。今天花点时间好好学习了一下,分享给有需要的朋友。
面试中的 ThreadLocal 原理和使用场景