Hit*_*esh 2 java spring java.util.concurrent forkjoinpool spring-boot
我想在我的 Spring Boot 项目中使用 ForkJoinPool 和 @Async 注释,比如 ThreadPoolTaskExecutor
例如 :-
@Bean("threadPoolTaskExecutor")
public TaskExecutor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(20);
executor.setMaxPoolSize(1000);
executor.setThreadNamePrefix("Async-");
return executor;
}
Run Code Online (Sandbox Code Playgroud)
我在我的代码中使用https://dzone.com/articles/spring-boot-creating-asynchronous-methods-using-作为这个链接,但我想像这样使用 ForkJoinPool 。
将 ForkJoinPool 与异步一起使用很好。这种方法并不完全是 ForkJoinPool 的设计目的——解决分而治之任务并使用工作窃取算法,而是执行事件样式或 IO 阻塞任务,这是一个有效的用例。
因此,使用基本用法,您可以执行以下操作:
CompletableFuture.runAsync(() -> doSomething(), ForkJoinPool.commonPool());
Run Code Online (Sandbox Code Playgroud)
您还可以在异步模式下创建自定义 ForkJoinPool。异步模式下 ForkJoinPool 中的工作人员以 FIFO(先进先出)顺序处理任务。默认情况下,ForkJoinPools 以 LIFO(后进先出)顺序处理此类任务。此外,异步模式设置仅涉及从未加入的分叉任务。可用于提交但从未加入的事件样式任务(为副作用而执行的任务,而不是返回将由分叉任务处理然后加入的结果)。
您可以像这样在异步模式下创建具有给定并行度的自定义 ForkJoinPool(第一个参数是池大小,最后一个 - bool asyncMode):
ForkJoinPool pool = new ForkJoinPool(
6, ForkJoinPool.defaultForkJoinWorkerThreadFactory, null, true);
Run Code Online (Sandbox Code Playgroud)
所以你所追求的是:
@Bean("threadPoolTaskExecutor")
public Executor getAsyncExecutor() {
ForkJoinPool pool = new ForkJoinPool(
6, ForkJoinPool.defaultForkJoinWorkerThreadFactory, null, true);
return pool;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7302 次 |
| 最近记录: |