$ java SemaphoreResourceGuard

worker-0 round 1: acquired permit, 1 callers concurrently in the resource (availablePermits=0)
worker-1 round 1: acquired permit, 2 callers concurrently in the resource (availablePermits=0)
worker-2 round 1: acquired permit, 2 callers concurrently in the resource (availablePermits=0)
worker-3 round 1: acquired permit, 2 callers concurrently in the resource (availablePermits=0)
worker-3 round 2: acquired permit, 1 callers concurrently in the resource (availablePermits=1)
worker-0 round 2: acquired permit, 2 callers concurrently in the resource (availablePermits=0)
worker-1 round 2: acquired permit, 1 callers concurrently in the resource (availablePermits=1)
worker-2 round 2: acquired permit, 2 callers concurrently in the resource (availablePermits=0)
worker-2 round 3: acquired permit, 1 callers concurrently in the resource (availablePermits=1)
worker-3 round 3: acquired permit, 2 callers concurrently in the resource (availablePermits=0)
worker-0 round 3: acquired permit, 1 callers concurrently in the resource (availablePermits=1)
worker-1 round 3: acquired permit, 2 callers concurrently in the resource (availablePermits=0)
permits=2 maxObservedConcurrency=2
done
