public <T> FutureTask<T> execute(
            final ClassicHttpRequest request,
            final HttpContext context,
            final HttpClientResponseHandler<T> HttpClientResponseHandler,
            final FutureCallback<T> callback) {
        if (closed.get()) {
            throw new IllegalStateException("Close has been called on this httpclient instance.");
        }
        metrics.getScheduledConnections().incrementAndGet();
        final HttpRequestTaskCallable<T> callable = new HttpRequestTaskCallable<>(
                httpclient, request, context, HttpClientResponseHandler, callback, metrics);
        final HttpRequestFutureTask<T> httpRequestFutureTask = new HttpRequestFutureTask<>(
                request, callable);
        executorService.execute(httpRequestFutureTask);

        return httpRequestFutureTask;
    }
Schedule a request for execution.

@param <T>

@param request
           request to execute
@param context
           optional context; use null if not needed.
@param HttpClientResponseHandler
           handler that will process the response.
@param callback
           callback handler that will be called when the request is scheduled,
           started, completed, failed, or cancelled.
@return HttpAsyncClientFutureTask for the scheduled request.
httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/FutureRequestExecutionService.java