将默认的通用分叉/加入池与CompletableFuture一起使用来执行长阻塞调用是不是不好的做法?
2022-09-02 21:38:35
假设我有一个ComppletableFuture,它包装了一个阻塞调用,就像使用JDBC查询后端一样。在这种情况下,由于我没有将任何执行器服务作为参数传递给ComppletableFuture.supplyAsync(),因此通过后端获取资源的实际阻塞工作应由公共Fork/Join池中的线程完成。让来自常见 FJpool 的线程执行阻塞调用不是不好的做法吗?我在这里的优势是我的主线程没有阻塞,因为我委托阻塞调用异步运行。检查 abt JDBC 调用正在阻塞 这里 。如果这个推论是正确的,为什么可以选择将默认的通用FJpool与ComppletableFuture一起使用?
CompletableFuture<List<String>> fetchUnicorns =
CompletableFuture.supplyAsync(() -> {
return unicornService.getUnicorns();
});
fetchUnicorns.thenAccept(/**Do something with the result*/);