美文网首页
JUC-工具类:3. Semaphore

JUC-工具类:3. Semaphore

作者: rock_fish | 来源:发表于2021-06-16 18:30 被阅读0次

限流型,控制并发线程数

功能概述

  1. 内置 一个许可证池,其中存放 数量有限、可循环使用的许可证
  2. 线程可申请许可证,如果池子中还有就申请的到,如果没有了就等待。线程使用完了许可证,可以归还到池子中。
  3. 一旦容易中有了,等待的线程就可以申请的到,继续执行。

方法介绍

  1. 构造函数指定了许可证的个数;还有一个是否公平竞入
  2. acquire:
    如果许可证数量>1 ,领取一个,线程继续运行;如果许可证数量为0,线程阻塞等待,直到有其他线程归还许可证到池子中。
  3. release:
    归还许可证,池子中可用许可证个数+1,线程继续运行,如果有排队等待许可证的线程就唤醒它们去拿许可证。
  4. 有可中断和非阻塞版的方法。
  5. acquire(int permits) :
    一次申请多个许可证
  6. drainPermits :
    一次申请全部的许可证
  7. tryxxx:
    非阻塞式

以下方法返回的数据可能不够精确,最好用来做评估参考
int availablePermits() :返回此信号量中当前可用的许可证数。
int getQueueLength():返回正在等待获取许可证的线程数。
boolean hasQueuedThreads() :是否有线程正在等待获取许可证。
void reducePermits(int reduction) :减少reduction个许可证。是个protected方法。
Collection getQueuedThreads() :返回所有等待获取许可证的线程集合。是个protected方法。

场景案例

假如去景区旅游,如果景区只允许同时100个人进入游玩,进入的游客必须领取准入证,那么前100个游客都可以直接领取准入证进入;当剩余证件为0的时候,来的客人只能再外边吃瓜等待,等里游客游玩结束,出来一个归还一个证件,排队等的就领取一个证件进入。也可以是一次要n个证件,如果剩余的够就准入,否则就继续等剩余游玩中的游客离开后归还了足够的证件。

相关文章

  • JUC-工具类:3. Semaphore

    限流型,控制并发线程数 功能概述 内置 一个许可证池,其中存放 数量有限、可循环使用的许可证 线程可申请许可证,如...

  • JUC-工具类

    Semaphore 信号量或者说叫管理器,它其实不是对资源加锁,而是控制最多N个线程可以同时访问资源。类似停车场,...

  • Java并发编程之工具类

    一、并发工具类 JDK1.5 引入常用并发工具类:CountDownLatch/Semaphore/CyclicB...

  • 并发工具类 Semaphore

    上篇介绍了内部使用AQS的并发工具类CountDownLatch,接下来我要介绍的并发工具类Semaphore内部...

  • 并发工具类-Semaphore

    1.使用示例 多个线程从数据库池拿固定数量的连接,用完归还数据库池。用信号量来控制数据库池可用连接的数量,进行流控...

  • 23-同步工具类之CountDownLatch、CyclicBa

    同步工具类之CountDownLatch、CyclicBarrier和Semaphore 在java 1.5中,提...

  • 高并发(10)- 线程并发工具类-Semaphore

    @[TOC](高并发(10)- 线程并发工具类-Semaphore) 前言 上篇文章讲解了线程的并发工具类之Cyc...

  • Semaphore

    Semaphore Semaphore 是 Java 并发包中提供的一个工具类,翻译过来为“信号量”,作用是控制并...

  • Semaphore源码分析

    1. Semaphore 定义 Semaphore 主要用于限量控制并发执行代码的工具类, 其内部通过 一个 pe...

  • Semaphore 源码分析 (基于Java 8)

    1. Semaphore 定义 Semaphore 主要用于限量控制并发执行代码的工具类, 其内部通过 一个 pe...

网友评论

      本文标题:JUC-工具类:3. Semaphore

      本文链接:https://www.haomeiwen.com/subject/xbavektx.html