diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AbstractHttpAsyncClientBase.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AbstractHttpAsyncClientBase.java index 264faa2c70..9890f7712a 100644 --- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AbstractHttpAsyncClientBase.java +++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AbstractHttpAsyncClientBase.java @@ -29,6 +29,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import org.apache.hc.core5.function.Supplier; @@ -116,7 +117,18 @@ public final void close(final CloseMode closeMode) { } ioReactor.initiateShutdown(); ioReactor.close(closeMode); - executorService.shutdownNow(); + if (closeMode == CloseMode.GRACEFUL) { + executorService.shutdown(); + try { + if (!executorService.awaitTermination(1, TimeUnit.SECONDS)) { + executorService.shutdownNow(); + } + } catch (final InterruptedException ignore) { + Thread.currentThread().interrupt(); + } + } else { + executorService.shutdownNow(); + } internalClose(closeMode); }