Semaphore 信号量如何实现文件导出限流?( 三 )
< 0) throw new IllegalArgumentException();sync.releaseShared(permits);}当然参数如果允许用户自定义 , 就需要添加一个判断 。
其他方法主要讲述下和 Sync 对象有关的几个方法 , 不能让我们前面 Sync 源码讲解浪费了 。
这里就是对 Sync 对应方法的简单调用 。
/** * Returns the current number of permits available in this semaphore. * * This method is typically used for debugging and testing purposes. * * @return the number of permits available in this semaphore 剩余的可用信号量 * @author 老马啸西风 */public int availablePermits() {return sync.getPermits();}/** * Acquires and returns all permits that are immediately available. * * @return the number of permits acquired 这个会把所有可用的信号量都用掉 。 有点一掷千金的味道 。*/public int drainPermits() {return sync.drainPermits();}/** * Shrinks the number of available permits by the indicated * reduction. This method can be useful in subclasses that use * semaphores to track resources that become unavailable. This * method differs from {@code acquire} in that it does not block * waiting for permits to become available. * * @param reduction the number of permits to remove 减少对应的可用数量 。 不过这个方法是一个 protected ,* @throws IllegalArgumentException if {@code reduction} is negative */protected void reducePermits(int reduction) {if (reduction < 0) throw new IllegalArgumentException();sync.reducePermits(reduction);}
小结Semaphore 作为一个并发的控制工具 , 使用起来非常的方便 , 实现的原理非常类似可重入锁 , 都是继承自 AQS 类 。
希望本文对你有帮助 , 如果有其他想法的话 , 也可以评论区和大家分享哦 。
各位极客的点赞收藏转发 , 是老马持续写作的最大动力!
文章插图
- 程序|2020全景生态流量秋季大报告:TOP100APP超半数布局小程序,全景流量重塑行业竞争新格局
- 现状|程序员现状揭秘:平均年薪20.36万,Java人才需求量最大
- 用户|5G信号有猫腻,又在考验用户的智商?
- 辞职|继大量员工辞职后,刘强东又摊上大事,网友:这回玩大了!
- 拍照|iPhone12还没捂热13就曝光了,屏幕、信号、拍照均有升级!
- 区企联企协|谋求更高质量的转型发展!区企联企协与区科技局成功举办科技考察对接活动
- 涡轮|看法米特涡轮流量计如何让你得心应手
- 美国半导体行业协会|中国光伏新增装机量领跑全球
- 电池容量|Windows 自带功能查看笔记本电脑电池使用情况,你的容量还好吗?
- 好友聊天|《QQ》能量值计算规则