流量控制 Semaphore
Semaphore是一个计数的信号量。初始化时分配一个配额permits。在访问前需要用acquire()方法申请一个配额,访问结束后调用release()释放配置。申请配额时如果配额不足将会阻塞。
使用例子
例子:有2个足球,4个人射门练习。每个人射门后都要把球拿回来,后面的人才能射球。这里足球就是配额。
1 | public class Player implements Runnable { |
结果
1 | 踢球。。。。1 |
常用API
1 | void acquire() |
总结
- Semaphore内部是由共享锁实现的。
- Semaphore支持公平锁和非公平锁。默认是非公平锁。可以通过构造函数设置。