if (requested == 0) { try { _sharedLock.wait(); } catch (InterruptedException ie) {} return 0; }
    private int reserveShared(int requested) {        synchronized(_sharedLock) {            while(_sharedAvailable == 0) {                try {                    _sharedLock.wait();                } catch (InterruptedException ie) {}            }            int allocation = Math.min(requested, _sharedAvailable);            _sharedAvailable -= allocation;            return allocation;        }    }