@@ -0,0 +1,1091 @@
+package rxbroadcast.time;%0A%0Aimport org.jetbrains.annotations.NotNull;%0A%0Aimport java.util.concurrent.Semaphore;%0Aimport java.util.concurrent.TimeUnit;%0Aimport java.util.concurrent.locks.Condition;%0Aimport java.util.concurrent.locks.Lock;%0A%0Afinal class NonReentrantLock implements Lock %7B%0A    private final Semaphore semaphore = new Semaphore(1);%0A%0A    @Override%0A    public final void lock() %7B%0A        semaphore.acquireUninterruptibly();%0A    %7D%0A%0A    @Override%0A    public final void lockInterruptibly() throws InterruptedException %7B%0A        semaphore.acquire();%0A    %7D%0A%0A    @Override%0A    public final boolean tryLock() %7B%0A        return semaphore.tryAcquire();%0A    %7D%0A%0A    @Override%0A    public final boolean tryLock(final long time, @NotNull final TimeUnit unit) throws InterruptedException %7B%0A        return semaphore.tryAcquire(time, unit);%0A    %7D%0A%0A    @Override%0A    public final void unlock() %7B%0A        semaphore.release();%0A    %7D%0A%0A    @NotNull%0A    @Override%0A    public final Condition newCondition() %7B%0A        throw new UnsupportedOperationException(%22A NonReentrantLock cannot bind a Condition%22);%0A    %7D%0A%7D%0A

Add a NonReentrantLock implementation