java高并发之Semaphore

Semaphore在Java中常用于限流控制,它基于AQS实现,提供了公平锁和非公平锁的选择。初始化时设定许可数量,多个线程并发访问时,超过许可数量的线程会被阻塞并等待。当持有许可的线程执行完毕释放许可后,阻塞的线程会被唤醒,重新竞争资源。acquire()方法会尝试获取许可,若获取失败则将线程加入等待队列;release()方法则释放许可,可能唤醒等待队列中的线程。
摘要由CSDN通过智能技术生成

一,自己的理解

semaphore 一般可以用作限流,是线程共享模式,初始化时,会传入一个int i类型的数值(可以当作票据),多个线程并发访问时,就会控制初始化的i个线程同时访问,其他线程进入队列进行阻塞,当拿到票据的线程执行完之后,就会释放票据,同时也会唤醒队列进行阻塞的线程,被唤醒的线程与还没有进入对列的线程会抢夺资源,如此循环。

二,源码分析

class Semaphore {

// 内部维护一个抽象类sync,且 继承了AQS

abstract static class Sync extends AbstractQueuedSynchronizer

// 默认的是非公平锁,及共享锁

static final class NonfairSync extends Sync
static final class FairSync extends Sync

}

//1.初始化,默认创建一个非公平锁,并且设置state=4

Semaphore s =  new Semaphore(4);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值