diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/SdkAdvancedAsyncClientOption.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/SdkAdvancedAsyncClientOption.java index ab9d87026abc..fb2a1135eeba 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/SdkAdvancedAsyncClientOption.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/SdkAdvancedAsyncClientOption.java @@ -45,10 +45,12 @@ public final class SdkAdvancedAsyncClientOption extends ClientOption { *
  • You want more fine-grained control over the {@link ThreadPoolExecutor} used, such as configuring the pool size * or sharing a single pool between multiple clients. *
  • You want to add instrumentation (i.e., metrics) around how the {@link Executor} is used. - *
  • You know, for certain, that all of your {@link CompletableFuture} usage is strictly non-blocking, and you wish to - * remove the minor overhead incurred by using a separate thread. In this case, you can use - * {@code Runnable::run} to execute the future-completion directly from within the I/O thread. * + * WARNING + *

    + * We strongly discourage using {@code Runnable::run}, which executes the future-completion directly from + * within the I/O thread because it may block the I/O thread and cause deadlock, especially if you are sending + * another SDK request in the {@link CompletableFuture} chain since the SDK may perform blocking calls in some cases. */ public static final SdkAdvancedAsyncClientOption FUTURE_COMPLETION_EXECUTOR = new SdkAdvancedAsyncClientOption<>(Executor.class);