В структуре исполнителей Java для ожидания до завершения всех задач у нас есть метод invokeAll
(). Но при использовании весны ThreadPoolTaskExecutor
у нас есть только метод отправки, который возвращает объект Future.So здесь после завершения Первая задача - начать следующую задачу. Итак, если я хочу подождать, пока все выполненные задачи не будут выполнены? означает, что есть какой-либо метод, доступный в пружине, которая равна invokeAll()
Пожалуйста, поправьте меня, если я понимаю неправильно ..java executor framework invokeВсего эквивалентного метода в весеннем исполнителе
1
A
ответ
0
Вы можете обернуть TaskExecutor с org.springframework.core.task.support.ExecutorServiceAdapter:
ExecutorServiceAdapter adapter = new ExecutorServiceAdapter(taskExecutor);
List<Future<V>> futures = adapter.invokeAll(tasks);
Надеюсь, что это поможет.
0
Всегда сбой в ThreadPoolTaskExecutor
Исходный код сделал меня глупым. вы напоминаете мне, стоит ли ExecutorServiceAdapter
весной. Теперь я думаю, да, и вот мой код, чтобы ответить на ваш вопрос, надеюсь, что не так.
ThreadPoolTaskExecutor threadPool = atx.getBean("threadPool", ThreadPoolTaskExecutor.class);
ExecutorServiceAdapter adapter = new ExecutorServiceAdapter(threadPool);
List<Callable<Integer>> tasks = new ArrayList<>();
Callable<Integer> task = null;
for (int i = 0; i < 10; i++){
task = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int time = new Random().nextInt(1000);
Thread.sleep(100);
System.out.println(Thread.currentThread().getName() + " has slept " + time);
return time;
}
};
//submit task and wait to execute
threadPool.submit(task);
//add all task to list
tasks.add(task);
}
//get the start time of all threads
long start = System.currentTimeMillis();
try {
List<Future<Integer>> result = adapter.invokeAll(tasks);
for (int i = 0; i < result.size(); i++){
System.out.println(result.get(i).get());
}
} catch (ExecutionException ex){
ex.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Total time is " + (System.currentTimeMillis() - start));
Смежные вопросы
- 1. Оценить ограничение количества потоков в Исполнителе (Java)
- 2. Примеры применения Executor Framework
- 3. Executor framework future.get() зависает
- 4. Переопределение метода выполнения Executor
- 5. Spark executor & tasks concurrency
- 6. Интерфейс Java Executor Пример реализации из «API-интерфейса Executor»
- 7. Оптимизация пула потоков Executor-java
- 8. Как определить права java Executor?
- 9. Java Thread Pool Executor Мониторинг
- 10. java Многопоточность с использованием Executor
- 11. Thread.join() эквивалент в исполнителе
- 12. Зависимые потоки в службе Executor - Java
- 13. Как получить рабочий каталог в исполнителе
- 14. Пояснение maxQueueSize в исполнителе tomcat
- 15. Приостановка и возобновление работы службы Executor или завершение работы и перезагрузка службы Java-Executor
- 16. Письменные файлы с использованием Executor in Java
- 17. Использование Java Executor on AppEngine вызывает AccessControlException
- 18. Java Thread Executor Submit Main Class
- 19. Java Executor - не работает потоки параллельно
- 20. Java Executor - отдельная задача с несколькими записями
- 21. Java Executor не работает на JdbcTemplate
- 22. Java ThreadPool Executor: изменить поведение завершения строки
- 23. создать новый класс java в весеннем приложении
- 24. способ десериализации массива байт в весеннем Java
- 25. Какой шаблон дизайна реализует инфраструктура Java Executor?
- 26. Пользовательский log4j appender в исполнителе искры
- 27. Использование Entity Framework 5 для возврата объекта, эквивалентного datareader
- 28. Метод java-метода Robot Framework и Selenium
- 29. Как запустить задачу мезо на конкретном исполнителе?
- 30. Последовательный файл обработки в исполнителе threadpool
Возможно, нет, я проверил, что все классы включают метод invokeAll(), но все они указывают на классы пакетов java.util.concurrent. – Crabime