Та часть, которую я хочу запускать в параллельных потоках, изначально была построена с циклом for, обрабатывающим список.
Код: Выделить всё
@Service
public ApplicationServiceImpl implements ApplicationService {
@Override
public ResponseEntity startProcess(List myObjectList) throws Exception {
for (MyObject myObject : myObjectList) {
AnotherTypeOfObject anotherTypeOfObject = runMethodA(myObject);
YetAnotherTypeOfObject yetAnotherTypeOfObject = runMethodB(anotherTypeOfObject);
runMethodC(yetAnotherTypeOfObject, aStringValue, anotherStringValue);
runMethodD(yetAnotherTypeOfObject);
}
}
}
Я довольно долго искал решение, которое позволило бы запускать потоки из списка из 100 объектов MyObject вместо одного за другим.
Что я сделал, так это создал:
Код: Выделить всё
@Configuration
@EnableAsync
public class AsyncConfiguration() {
@Bean(name = "threadPoolTaskExecutor")
public Executor aSyncExecutor() {
final ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(4);
threadPoolTaskExecutor.setMaxPoolSize(4);
threadPoolTaskExecutor.setQueueCapacity(50);
threadPoolTaskExecutor.setThreadNamePrefix("threadNamePrefix");
threadPoolTaskExecutor.initialize();
return threadPoolTaskExecutor;
}
}
Код: Выделить всё
private void runThreads(MyObject myObject, String aStringValue, String anotherStringValue) {
AnotherTypeOfObject anotherTypeOfObject = runMethodA(myObject);
YetAnotherTypeOfObject yetAnotherTypeOfObject = runMethodB(anotherTypeOfObject);
runMethodC(yetAnotherTypeOfObject, aStringValue, anotherStringValue);
runMethodD(yetAnotherTypeOfObject);
}
Код: Выделить всё
@Override
@Async("threadPoolTaskExecutor")
public ResponseEntity startProcess(List myObjectList) throws Exception {
String aStringValue = myObject.getAStringValue();
String anotherStringValue = myObject.getAnotherStringValue();
myObjectList.forEach(myObject -> runThreads(myObject, aStringValue, anotherStringValue));
}
Что мне здесь не хватает?>
Подробнее здесь: https://stackoverflow.com/questions/691 ... pring-boot
Мобильная версия