semaphore.acquire()
public void acquire() throws InterruptedException {sync.acquireSharedInterruptibly(1);}
public final void acquireSharedInterruptibly(int arg)throws InterruptedException {if (Thread.interrupted())throw new InterruptedException();if (tryAcquireShared(arg) < 0)//AQS 的排队过程doAcquireSharedInterruptibly(arg);}
protected int tryAcquireShared(int acquires) {for (;;) {if (hasQueuedPredecessors())return -1;int available = getState();int remaining = available - acquires;// 小于0 或者 CAS成功 ,如果小于0会短路,不执行cas操作if (remaining < 0 || compareAndSetState(available, remaining))return remaining;}}

