class GCDExecutorService extends AbstractExecutorService {

    public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
        long wait = unit.toNanos(timeout);
        shutdownLock.lock();
        try {
            while ( !isTerminated() ) {
                if ( wait <= 0) {
                    return false;
                }
                wait = shutdownCondition.awaitNanos(wait);
                terminateIfDone(queue.operationCount().intValue() == 0);
            }
            return true;
        } finally {
            shutdownLock.unlock();
        }
    }

    public  GCDExecutorService();

}