引入:
Semaphore 信号量是一个计数器,用来限制访问资源的线程的个数; 而不是限制的资源的个数;
Semaphore 和ReentrantLock的区别:
ReentrantLock只允许同一时刻线程的独占,
而Semaphore用在共享资源有多个,也允许多个线程来访问这些资源;只是希望对访问的线程上限加以限制;
两者底层都基于AQS;
使用场景:
1.使用 semaphore限流,访问高峰期时,让超出线程上限的请求线程阻塞,高峰期过去再释放许可;
semaphore构造函数和ReentrantLock一样,返回FairSnyc或NonfairSync; 这俩同步器继承自Sync,最终继承自AQS !
使用state来表示资源数量,也就是信号量,semaphore的构造函数需要指定state数量;



在Sync类中,用setState()将信号量数量permits会传给state;








