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 类 。
希望本文对你有帮助 , 如果有其他想法的话 , 也可以评论区和大家分享哦 。
各位极客的点赞收藏转发 , 是老马持续写作的最大动力!
Semaphore 信号量如何实现文件导出限流?文章插图