【发布时间】:2021-03-19 07:59:08
【问题描述】:
在我的 webapp 中,supplyAsync 方法在云 linux 环境中使用 forkjoin 池,但在本地 linux 机器中,相同的代码使用线程 1 线程 2 和类 web 应用程序类加载器。是否有任何配置可以更改可完成期货的默认线程池。我想获得云中的本地行为。使用 Web 应用程序类加载器进行线程化。 java版本java 11,tomcat版本8.5.24。
CompletableFuture<Void> asyncFuture = future.thenAcceptAsync(t -> {
if (!complete.getAndSet(true)) {
try {
completeAction.accept(t);
} finally {
synchronized (executor) {
K.shutdown();
}
}
}
});
synchronized (executor) {
if (!executor.isShutdown()) {
executor.schedule(() -> {
if (!complete.getAndSet(true)) {
try {
asyncFuture.cancel(false);
timeoutAction.run();
} finally {
executor.shutdown();
}
}
}, 200, 50);
}
}
【问题讨论】:
-
您是否尝试过将执行程序作为最后一个参数传递给
thenAcceptAsync(docs.oracle.com/javase/8/docs/api/java/util/concurrent/…) .. 在任何一种情况下选择适当的 on .. 根据需要分别选择 ForkJoin 或 ThreadPoolExecutor。
标签: java tomcat classloader completable-future web-project