Semaphore自白:限流器用我就对了!(4)

简介: Semaphore自白:限流器用我就对了!(4)

其他补充


我还提供了一些其他方法,用于实现更多的功能,详情如下:


  • int availablePermits():返回此信号量中当前可用的许可证数。
  • int getQueueLength():返回正在等待获取许可证的线程数。
  • boolean hasQueuedThreads():是否有线程正在等待获取许可证。
  • boolean isFair():查询 Semaphore 使用的是公平模式还是非公平模式,如果此信号量使用的是公平模式则返回 true。
  • void release(int permits):释放给定数量的许可证,将其返回到信号量。
  • tryAcquire():从这个信号量获得许可证,只有在调用时可以使用该许可证。
  • tryAcquire(int permits):从这个信号量获取给定数量的许可证,只有在调用时全部可用。
  • tryAcquire(int permits, long timeout, TimeUnit unit):从该信号量获取给定数量的许可证,如果在给定的等待时间内全部可用,并且当前线程尚未 interrupted。
  • tryAcquire(long timeout, TimeUnit unit):如果在给定的等待时间内可用,并且当前线程尚未 到达 interrupted,则从该信号量获取许可。
  • void reducePermits(int reduction) :减少可用的许可证数量 reduction 个,它是 protected 方法。
  • Collection getQueuedThreads() :返回所有等待获取许可证的线程集合,它是 protected 方法。

总结


Semaphore 信号量是用来管理一组证书的,默认情况下它采取的是非公平的方式来管理证书,这样做的目的是为了实现高性能。Semaphore 中包含了两个重要的方法:


release() 方法发布一个许可证书;acquire() 方法阻塞并等待一个证书。当线程调用了 acquire() 方法只有拥有了证书才能继续执行,因此可以使用 Semaphore 来实现限流。

相关文章
|
缓存 算法 安全
互联网并发与安全系列教程(02) - 服务限流
互联网并发与安全系列教程(02) - 服务限流
85 0
|
4月前
|
安全 数据库连接 数据库
(六)手撕并发编程之基于Semaphore与CountDownLatch分析AQS共享模式实现
在上篇文章《深入剖析并发之AQS独占锁&重入锁(ReetrantLock)及Condition实现原理》中我们曾基于ReetrantLock锁分析了AQS独占模式的实现原理,本章则准备从Semaphore信号量的角度出发一探AQS共享模式的具体实现。共享模式与独占模式区别在于:共享模式下允许多条线程同时获取锁资源,而在之前分析的独占模式中,在同一时刻只允许一条线程持有锁资源。
|
4月前
|
监控 Sentinel 缓存
高并发架构设计三大利器:缓存、限流和降级问题之RateLimiter的acquire()方法有什么作用
高并发架构设计三大利器:缓存、限流和降级问题之RateLimiter的acquire()方法有什么作用
|
6月前
|
安全 Java 数据库连接
并发控制利器Semaphore
并发控制利器Semaphore
53 0
|
Java 开发者
解锁Java多线程编程中的死锁之谜
解锁Java多线程编程中的死锁之谜
57 0
|
6月前
|
Java 测试技术
Java多线程实战-从零手搓一个简易线程池(二)线程池实现与拒绝策略接口定义
Java多线程实战-从零手搓一个简易线程池(二)线程池实现与拒绝策略接口定义
|
6月前
|
安全 Java 开发工具
Semaphore:实现一个限流器
Semaphore:实现一个限流器
58 0
|
存储 算法 NoSQL
关于高并发限流的详谈
高并发限流是在面对大量请求并发访问时,为了保护系统的稳定性和可用性,对请求进行限制和控制的一种技术手段。下面将详细介绍高并发限流的原理、常见的限流算法以及实现方法。
104 0
每日一博 - Semaphore使用场景分析以及源码分析
每日一博 - Semaphore使用场景分析以及源码分析
71 0
深入理解JUC:第六章:Semaphore信号灯
深入理解JUC:第六章:Semaphore信号灯
深入理解JUC:第六章:Semaphore信号灯