
一个简单的示例:
package net.jcip.examples;import java.util.concurrent.locks.*;import net.jcip.annotations.*;/*** OneShotLatch* <p/>* Binary latch using AbstractQueuedSynchronizer** @author Brian Goetz and Tim Peierls*/@ThreadSafepublic class OneShotLatch {private final Sync sync = new Sync(); //基于委托的方式public void signal() {sync.releaseShared(0); ////会调用tryAcquireShared}public void await() throws InterruptedException {sync.acquireSharedInterruptibly(0); //会调用tryAcquireShared}private class Sync extends AbstractQueuedSynchronizer { //内部私有类protected int tryAcquireShared(int ignored) {// Succeed if latch is open (state == 1), else failreturn (getState() == 1) ? 1 : -1;}protected boolean tryReleaseShared(int ignored) {setState(1); // Latch is now openreturn true; // Other threads may now be able to acquire}}}