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