【发布时间】:2019-10-05 21:46:39
【问题描述】:
我最近一直在研究 Java CompletableFuture,发现我们应该始终使用自定义的线程池。有了它,我发现了两种将线程池传递给现有代码的方法。如下所示
这是我在配置文件中的线程池
@Override
@Bean(name = "commonThreadPool")
public Executor getAsyncExecutor() {
return new ThreadPoolTaskExecutor();
}
1.在参数中传递现有线程池。
@Autowired
@Qualifier("commonThreadPool")
TaskExecutor existingThreadPool;
CompletableFuture.runAsync(() -> executeTask(),existingThreadPool);
2。像下面这样使用异步
@Async("commonThreadPool")
public void executeTask() {
// Execute Some Task
}
是否有任何第三种方法可以编写 CompletableFuture 处理程序或在可以传递自定义线程池的单个位置覆盖其现有行为。之后,无论我在哪里使用下面的代码,它都应该选择我现有的 ThreadPool 而不是 forkJoin 池。
CompletableFuture.runAsync(() -> executeTask());
【问题讨论】:
-
@Async有什么问题?
标签: java multithreading spring-boot completable-future