一,自己的理解
semaphore 一般可以用作限流,是线程共享模式,初始化时,会传入一个int i类型的数值(可以当作票据),多个线程并发访问时,就会控制初始化的i个线程同时访问,其他线程进入队列进行阻塞,当拿到票据的线程执行完之后,就会释放票据,同时也会唤醒队列进行阻塞的线程,被唤醒的线程与还没有进入对列的线程会抢夺资源,如此循环。
二,源码分析
class Semaphore {
// 内部维护一个抽象类sync,且 继承了AQS
abstract static class Sync extends AbstractQueuedSynchronizer
// 默认的是非公平锁,及共享锁
static final class NonfairSync extends Sync
static final class FairSync extends Sync
}
//1.初始化,默认创建一个非公平锁,并且设置state=4
Semaphore s = new Semaphore(4);