@Override public boolean await(final long timeout, final TimeUnit timeUnit) throws IllegalStateException, InterruptedException { if(isShutdown()) { final long invokeTimeMillis = System.currentTimeMillis(); final long timeOutMillis = timeUnit.toMillis(timeout); while(timeOutMillis > System.currentTimeMillis() - invokeTimeMillis) { if(itemsBuff.isEmpty()) { return true; } LockSupport.parkNanos(1); } return false; } else { return super.await(timeout, timeUnit); } }