ForkJoinPool + CompletableFuture 使用场景
132 ·
0 ·
25天前
最新编辑时间: 25天前
最新编辑原因:

背景

在实际工作中,经常遇到一个业务场景,就是重复的功能需要针对不同的对象重复执行,而这种是可以并行执行,因此使用CompletableFuture + ForkJoinPool

实际

static final ForkJoinPool definePool = new ForkJoinPool();
publi static ForkJoinPool definePool(){
	return definePool;
}
List<CompletableFuture<Void>> futureList = new ArrayList<>();
for(int i=0;i<9;i++){ // 模拟多个相同的任务
	CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
		// handle code
		}
	}, definePool());
	futureList.add(future);
}


// 等待任务都执行完成
CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])).join();

为什么要使用自己的ForkJoinPool?

多核CPU会使用ForkJoinPool.commonPool(),这个是公用的,如果有其他任务也用这个,很容易造成等待时间过长,所有使用自己的,和其他的Pool隔离开

另外,在使用ForkJoinPool时,初始化一次就行了(static final),不要为每一个任务都创建一个ForkJoinPool,不然太浪费了,且和一个thread有啥区别呢


本作品系原创,采用《署名-非商业性使用-禁止演绎4.0 国际》许可协议.转载请说明出处
本文链接:https://www.upupor.com/u/22110706099414382592 复制

无内容

推荐阅读