Java 11 HTTP 客户机异步执行
我正在尝试JDK 11中新的HTTP客户端API,特别是其执行请求的异步方式。但是有些东西我不确定我是否理解(某种实现方面)。在文档中,它说:
在可行的情况下,返回实例的异步任务和依赖操作在客户端提供的线程上执行。
CompletableFuture
Executor
据我所知,这意味着如果我在创建对象时设置了自定义执行器:HttpClient
ExecutorService executor = Executors.newFixedThreadPool(3);
HttpClient httpClient = HttpClient.newBuilder()
.executor(executor) // custom executor
.build();
然后,如果我异步发送请求并在返回的上添加依赖操作,则依赖操作应在指定的执行器上执行。CompletableFuture
httpClient.sendAsync(request, BodyHandlers.ofString())
.thenAccept(response -> {
System.out.println("Thread is: " + Thread.currentThread().getName());
// do something when the response is received
});
但是,在上面的依赖操作(中的使用者)中,我看到执行此操作的线程来自公共池而不是自定义执行程序,因为它打印 。thenAccept
Thread is: ForkJoinPool.commonPool-worker-5
这是实现中的错误吗?还是我错过了什么?我注意到它说“实例在客户端的执行器提供的线程上执行,如果可行”,那么这是不应用这种情况吗?
请注意,我也尝试过,结果是相同的。thenAcceptAsync