专业的JAVA编程教程与资源

网站首页 > java教程 正文

跟着大神学Java并发实现原理—JDK源码剖析之同步工具类Semaphore

temp10 2025-02-18 13:27:31 java教程 9 ℃ 0 评论

同步工具类

除了锁与 Condition,Concurrent 包还提供了一系列同步工具类。这些同步工具类的原理,有些也是基于AQS的,有些则需要特殊的实现机制,这一章将对所有同步工具类的实现原理进行剖析。

Semaphore

Semaphore也就是信号量,提供了资源数量的并发访问控制,其使用代码很简单,如下所示。

跟着大神学Java并发实现原理—JDK源码剖析之同步工具类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加操作。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表