网站首页 > 教程文章 正文
同步工具类
除了锁与 Condition,Concurrent 包还提供了一系列同步工具类。这些同步工具类的原理,有些也是基于AQS的,有些则需要特殊的实现机制,这一章将对所有同步工具类的实现原理进行剖析。
Semaphore
Semaphore也就是信号量,提供了资源数量的并发访问控制,其使用代码很简单,如下所示。
如图4-1所示,假设有n个线程来获取Semaphore里面的资源(n>;10),n个线程中只有10个线程能获取到,其他线程都会阻塞。直到有线程释放了资源,其他线程才能获取到。
当初始的资源个数为1的时候,Semaphore退化为排他锁。正因为如此,Semaphone的实现原理和锁十分类似,是基于AQS,有公平和非公平之分。Semaphore相关类的继承体系如图4-2所示。
由于Semaphore和锁的实现原理基本相同,上面的代码不再展开解释。资源总数即state的初始值,在acquire里对state变量进行CAS减操作,减到0之后,线程阻塞;在release里对state变量进行CAS加操作。
猜你喜欢
- 2024-12-26 进程间通信:共享内存和信号量的统一封装机制原理与实现
- 2024-12-26 python基础篇:多线程的基本使用 python3.9多线程
- 2024-12-26 介绍C#中的并发集合,并说明其在多线程编程中的作?
- 2024-12-26 Hystrix系列之信号量、线程池 信号量 线程池
- 2024-12-26 劳斯莱斯推出独一无二的Spectre Semaphore:车头泼墨,极致奢华
- 2024-12-26 Linux信号量(1)-SYSTEM V Linux信号量做进程同步
- 2024-12-26 什么是多线程同步?请列举多种多线程同步机制并?较它们的优缺点
- 2024-12-26 2 万字长文详解 10 大多线程面试题|原力计划
- 2024-12-26 进程间通信——POSIX 有名信号量与无名信号量
- 2024-12-26 Python并发编程:使用信号量Semaphore实现资源有限的并发场景
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)