gpt4 book ai didi

java - 并行for与Spring异步执行

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:06:48 24 4
gpt4 key购买 nike

我想遍历元素列表并异步(以并行方式)对它们执行操作。

这是我的代码:

@Autowired
ElemManager elemManager;

...
List<Elem> elems = new ArrayList<>();

for ( Elem elem : elems ) {
System.out.println(elemManager.doSomething(elem).get());
}

ElemManager 在哪里:

public class ElemManager {

@Async
public Future<String> doSomething( Elem elem ) {
// do something
return "done";
}

我还在 spring 上下文中创建了一个线程池并启用了异步执行,因此:

@Configuration
@EnableAsync
public class TaskConfiguration implements AsyncConfigurer {

@Override
public Executor getAsyncExecutor() {
final ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setMaxPoolSize( 5 );
threadPoolTaskExecutor.setAwaitTerminationSeconds( 60 );
threadPoolTaskExecutor.initialize();
return threadPoolTaskExecutor;
}

@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new CustomAsyncExceptionHandler();
}

}

我错过了什么吗?通过 Spring 异步执行支持并行执行一个方法是正确的方法吗?

最佳答案

您实际上并没有使用 Spring 调用它。您只是像调用普通的旧方法一样调用它。

但除此之外,调用 Future.get() 意味着您等待 future 完成。

首先将 Future 添加到列表中,然后依次调用它们的 .get():

List<Future<?>> futures = new ArrayList<>();
for ( Elem elem : elems ) {
futures.add(elemManager.doSomething(elem));
}
for (Future<?> future : futures) {
System.out.println(future.get());
}

关于java - 并行for与Spring异步执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38308527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com