1.配置一个全局线程池----等待主线程去使用
/**
-
全局线程池配置
-
@author
*/
@Configuration
public class ThreadPoolConfig {/**
- 用于初始化租户信息
- @return
*/
@Bean
public ExecutorService InitTenantThreadPool(){
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNamePrefix(“init_tenant-%d”).build();
return new ThreadPoolExecutor(
5,
10,
10L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(512),
namedThreadFactory,
new ThreadPoolExecutor.CallerRunsPolicy());
}
}
2.借用CompletableFuture去实现线程并行,并等待线程执行完成
List<List> result = getTruncateStringList(0, unitIdList,new ArrayList<>());
List<CompletableFuture> tasks = new ArrayList<>();
result.forEach(re->{
tasks.add(CompletableFuture.runAsync(() -> organizationVOListForSS.addAll(organizationDao.findByIdList(re)),
threadPoolConfig.InitTenantThreadPool4()));
});
// 等待所有线程执行完成
CompletableFuture.allOf(tasks.toArray(new CompletableFuture[0])).join();
3.附上allOf的源代码和join方法的源代码 ------自己看吧
public T join() {
Object r;
if ((r = result) == null)
r = waitingGet(false);
return (T) reportJoin®;
}