###Semaphore是什么?
信号灯。
同时只能让设定的N个线程同时执行,其他的等待。
###实现原理
acquire() 表示阻塞并获取许可
release() 表示释放许可
Semaphore内部有1个许可证列表。acquire调用1次就会拿到1个许可,许可会-1(CAS)。设置的入参就是一共有几个许可。如果许可为0,则获取不到许可,线程阻塞。
release()释放许可后,许可会+1(CAS)。
public Semaphore(int permits)
public Semaphore(int permits, boolean fair)
Semaphore 有2个构造方法,第1个入参就是同时执行的线程数
第2个入参如果设置为true的话,会执行等待最久的线程。也就是公平性原则。