【发布时间】:2016-07-11 13:42:17
【问题描述】:
我想遍历元素列表并异步(以并行方式)对它们执行操作。
这是我的代码:
@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异步执行支持并行执行方法是否正确?
【问题讨论】:
-
您能告诉我们您是如何启用异步执行的吗?
标签: java spring multithreading