@Override public void dispose() { if (logger.isDebugEnabled()) { logger.debug("Waiting for works to finish execution"); } long initialMillis = System.currentTimeMillis(); while (workTracker.pendingWorks().size() != 0 && !isTimeoutExpired(initialMillis)) { try { Thread.sleep(waitMillis); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } if (logger.isDebugEnabled()) { logger.debug( String.format( "Stop waiting for works completion. There are %s works unfinished works", workTracker.pendingWorks().size())); } workTracker.dispose(); }