// Not really how java.util.concurrent.Semaphore is implemented
@ThreadSafe
public class SemaphoreOnLock {
private final Lock lock = new ReentrantLock();
//
I honestly don't see any valid use for the lock here, other than the fact that it introduces a memory fence. int assignments are atomic on 32/64 bit anyway.