Java并发编程专题(六)中,如何深入理解Semaphore(信号量)的使用?

2026-05-24 08:330阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计798个文字,预计阅读时间需要4分钟。

Java并发编程专题(六)中,如何深入理解Semaphore(信号量)的使用?

半路开始看的朋友可以回顾以下几篇Java并发编程专题(一)——线程基础知识、Java并发编程专题(二)——如何创建并运行Java线程、Java并发编程专题(三)——详解线程的同步。

半路开始看的朋友可以回顾一下前几篇

java并发编程专题(一)----线程基础知识

java并发编程专题(二)----如何创建并运行java线程

java并发编程专题(三)----详解线程的同步

java并发编程专题(四)----浅谈(JUC)Lock锁

java并发编程专题(五)----详解(JUC)ReentrantLock

Semaphore,从字面意义上我们知道他是信号量的意思。在java中,一个计数信号量维护了一个许可集。Semaphore 只对可用许可的号码进行计数,并采取相应的行动。拿到信号量的线程可以进入代码,否则就等待。通过acquire()和release()获取和释放访问许可。

信号量Semaphore是一个控制访问多个共享资源的计数器,它本质上是一个“共享锁”。

Java并发提供了两种加锁模式:共享锁和独占锁。前面介绍的ReentrantLock就是独占锁。对于独占锁而言,它每次只能有一个线程持有,而共享锁则不同,它允许多个线程并行持有锁,并发访问共享资源。

独占锁它所采用的是一种悲观的加锁策略, 对于写而言为了避免冲突独占是必须的,但是对于读就没有必要了,因为它不会影响数据的一致性。如果某个只读线程获取独占锁,则其他读线程都只能等待了,这种情况下就限制了不必要的并发性,降低了吞吐量。而共享锁则不同,它放宽了加锁的条件,采用了乐观锁机制,它是允许多个读线程同时访问同一个共享资源的。

阅读全文

本文共计798个文字,预计阅读时间需要4分钟。

Java并发编程专题(六)中,如何深入理解Semaphore(信号量)的使用?

半路开始看的朋友可以回顾以下几篇Java并发编程专题(一)——线程基础知识、Java并发编程专题(二)——如何创建并运行Java线程、Java并发编程专题(三)——详解线程的同步。

半路开始看的朋友可以回顾一下前几篇

java并发编程专题(一)----线程基础知识

java并发编程专题(二)----如何创建并运行java线程

java并发编程专题(三)----详解线程的同步

java并发编程专题(四)----浅谈(JUC)Lock锁

java并发编程专题(五)----详解(JUC)ReentrantLock

Semaphore,从字面意义上我们知道他是信号量的意思。在java中,一个计数信号量维护了一个许可集。Semaphore 只对可用许可的号码进行计数,并采取相应的行动。拿到信号量的线程可以进入代码,否则就等待。通过acquire()和release()获取和释放访问许可。

信号量Semaphore是一个控制访问多个共享资源的计数器,它本质上是一个“共享锁”。

Java并发提供了两种加锁模式:共享锁和独占锁。前面介绍的ReentrantLock就是独占锁。对于独占锁而言,它每次只能有一个线程持有,而共享锁则不同,它允许多个线程并行持有锁,并发访问共享资源。

独占锁它所采用的是一种悲观的加锁策略, 对于写而言为了避免冲突独占是必须的,但是对于读就没有必要了,因为它不会影响数据的一致性。如果某个只读线程获取独占锁,则其他读线程都只能等待了,这种情况下就限制了不必要的并发性,降低了吞吐量。而共享锁则不同,它放宽了加锁的条件,采用了乐观锁机制,它是允许多个读线程同时访问同一个共享资源的。

阅读全文