public Future<?> execute() {
        while(!queue.isEmpty()) {
            checkToInterrupt();
            if(future == null || future.isCancelled() || future.isDone()) {
                callee = queue.poll();
                if(callee != null) {
                    future = executor.submit(callee);
                    return future;
                }
            }
        }
        return future;
    }