工作过程
允许多个线程同时访问临界资源处理任务调度,但是限制访问并发量(AQS实现)
用法
static final Semaphore s = new Semaphore(1);//初始化计数器为1的信号量。
static void addOne() {
s.acquire(); // 信号量计数器-1 , 相当于模型里面的down,当前信号量为0的情况,堵塞。
try {
...//业务代码
}finally {
s.release(); //信号量计数器+1 ,相当于模型里面的up
}
}
使用场景:限流器(Hystrix中的信号量隔离)、线程池并发量控制等等。