class GCDExecutorService extends AbstractExecutorService {

    public void execute(Runnable command) {
        if ( command == null ) {
            throw new NullPointerException("Tasks may not be null");
        }
        try {
            shutdownLock.lock();
            if ( state != State.RUNNING ) {
                throw new RejectedExecutionException("Executor is not running");
            } else {
                InvocationFutureTask<?> task = command instanceof InvocationFutureTask<?> ?
                    (InvocationFutureTask<?>) command :
                    (InvocationFutureTask<?>) newTaskFor(command, null);
                queue.addOperation(task.getInvocationOperation());
            }
        } finally {
            shutdownLock.unlock();
        }
    }

    public  GCDExecutorService();

}