final long current = count.incrementAndGet(); if (current == releaseValue) { sync.releaseShared(0); final long current = count.decrementAndGet(); if (current == releaseValue) { sync.releaseShared(0);
class BooleanLatch { private static class Sync extends AbstractQueuedSynchronizer { boolean isSignalled() { return getState() != 0; } protected int tryAcquireShared(int ignore) { return isSignalled()? 1 : -1; } protected boolean tryReleaseShared(int ignore) { setState(1); return true; } } private final Sync sync = new Sync(); public boolean isSignalled() { return sync.isSignalled(); } public void signal() { sync.releaseShared(1); } public void await() throws InterruptedException { sync.acquireSharedInterruptibly(1); } }
return sync_.releaseShared(1);
sync.releaseShared(1); sync.releaseShared(-1);
return sync.tryAcquireNanos(group, unit.toNanos(time)); public void unlock() { sync.releaseShared(group); } public Condition newCondition() { throw new UnsupportedOperationException();