Im Java-Executor-Framework bis zur Fertigstellung aller Aufgaben haben wir invokeAll
() -Methode. Aber während der Verwendung von Spring ThreadPoolTaskExecutor
haben wir nur Methode übergeben, die Future-Objekt zurückgibt.So hier nach Abschluss der erste Aufgabe es wird nächste Aufgabe gestartet werden.So wenn ich warten möchte, bis alle Aufgaben abgeschlossen ist gibt es eine Möglichkeit, es zu tun? bedeutet, ist es eine Methode, im Frühjahr zur Verfügung, die zu invokeAll()
gleich ist mir bitte korrigieren, wenn mein Verständnis falsch ist ..Java-Executor-Framework invokeAll gleichwertige Methode im Frühjahr Executor
1
A
Antwort
0
Sie Ihren TaskExecutor mit org.springframework.core.task.support.ExecutorServiceAdapter wickeln können:
ExecutorServiceAdapter adapter = new ExecutorServiceAdapter(taskExecutor);
List<Future<V>> futures = adapter.invokeAll(tasks);
Hoffe es hilft.
0
Immer Fehler in ThreadPoolTaskExecutor
Quellcode machte mich dumm. Du erinnerst mich daran, ob ExecutorServiceAdapter
zum Frühling gehört. Jetzt denke ich ja, und hier ist mein Code, um Ihre Frage zu beantworten, hoffe nicht falsch.
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));
Verwandte Themen
- 1. Gleichwertige Methode Falsch Für die gleichen Objekte
- 2. MyBatis Operation wird im Frühjahr blockiert Boot Async-Methode
- 3. statische Setter-Methode Injektion im Frühjahr
- 4. @PostConstruct Methode wird nicht im Frühjahr
- 5. Concurrent Methode Eintrag im Frühjahr Controller
- 6. ExecutorService mit invokeAll() und Zukunft in Java
- 7. was ist gleichbedeutend für Hibernate X.hbm.xml Filter gleichwertige im Frühjahr Boot
- 8. Verwendung von getBean im Gegensatz zu Methode Injektion im Frühjahr
- 9. Dynamische Datenquellenverbindung im Frühjahr
- 10. ConversionService im Frühjahr
- 11. Testen @Scheduled im Frühjahr
- 12. Seltsamer NoSuchBeanDefinitionException im Frühjahr
- 13. Binding Objekt im Frühjahr
- 14. Bedienungsfehler im Frühjahr mvc
- 15. Ausnahmebehandlung Rahmen im Frühjahr java
- 16. Angularjs Post-Methode kann nicht den Parameter im Frühjahr MVC
- 17. Controller-Methode wird nicht im Frühjahr aufgerufen mvc
- 18. IntelliJ IDEA 13 nicht Methode im Frühjahr lösen
- 19. Instantiierung einer @autowired-Bean in @postconstruct-Methode im Controller, Frühjahr
- 20. Ist es möglich, Controller-Methode von einem Scriptlet im Frühjahr
- 21. JQuery-Anfrage abgebrochen - Methode zweimal im Frühjahr aufgerufen MVC-Controller
- 22. Prozess parallel mehrere lesen im Frühjahr Integration
- 23. Manipulation der Konfigurationseigenschaften im Frühjahr
- 24. java.sql.Statement.EXECUTE_FAILED Szenario im Frühjahr JdbcTemplate
- 25. Ausnahmebehandlung im Frühjahr Intergration Router
- 26. MessageInterpolator im Frühjahr
- 27. SocketTimoutException im Frühjahr JDBC
- 28. Objektdateien Konflikt im Frühjahr
- 29. @Specializes im Frühjahr
- 30. Authentifizierungsfehler im Frühjahr security.xml
vielleicht nicht, ich habe überprüft alle Klassen enthalten invokeAll() -Methode, aber sie alle zeigen auf java.util.concurrent Paketklassen. – Crabime