/** * $Id: SemaphoreReleaseOnlyOnce.java 1831 2013-05-16 01:39:51Z shijia.wxr $ */ package com.alibaba.rocketmq.remoting.common; import java.util.concurrent.Semaphore; import java.util.concurrent.atomic.AtomicBoolean; /** * ��ֻ֤�ͷ�һ�� * * @author vintage.wang@gmail.com shijia.wxr@taobao.com * */ public class SemaphoreReleaseOnlyOnce { private final AtomicBoolean released = new AtomicBoolean(false); private final Semaphore semaphore; public SemaphoreReleaseOnlyOnce(Semaphore semaphore) { this.semaphore = semaphore; } public void release() { if (this.semaphore != null) { if (this.released.compareAndSet(false, true)) { this.semaphore.release(); } } } public Semaphore getSemaphore() { return semaphore; } }