Ich habe eine Anwendung, wo für eine bestimmte Anzahl von Zeiten etwas berechnet werden muss. Diese Berechnungsfunktion hat die Annotation @Async (aus dem Spring Framework), die es ermöglicht, diese Berechnungen auf 4 Threads auszuführen. Das Problem ist, dass ich ungefähr 40000 dieser Berechnungen benötige und ich möchte die Zeit zwischen dem Anfang und dem Ende aller Berechnungen wissen, also sehe ich, wie spät es vor und nach der for-Schleife ist, die die Berechnungsfunktionen aufruft. Aber jetzt werden alle Berechnungen in eine Warteschlange gestellt, so dass die for-Schleife sofort beendet wird und die Zeit ungefähr 1 Sekunde beträgt, während es einige Stunden dauert, bis die Berechnungen abgeschlossen sind. Ich habe versucht, eine maximale Warteschlangengröße auf etwa 100 zu setzen (auch gut, um die Speichernutzung zu reduzieren), aber dies ist auch keine Lösung, da ich die letzten 100 Berechnungen in der Gesamtzeit verpassen werde. Gibt es eine Möglichkeit, den ausführenden Code unmittelbar nach der for-Schleife anzuhalten, bis alle Threads ihre Arbeit erledigt haben, aber immer noch die @ Async-Annotation verwenden können? Dies würde in der folgenden Ausgabe@Async verhindern, dass ein Thread fortgesetzt wird, bis andere Threads beendet sind
@Service
public class Bar {
@Async
public void executeBla() {
System.out.println("Bla!");
}
}
:
Dies ist ein Code, der das gleiche Problem zeigt:
Executing Klasse:
public class Foo {
public void executeBlaALotOfTimes() {
long before = System.currentTimeMillis();
for (int i = 0; i<40000; i++) {
executeBla();
}
long after = System.currentTimeMillis();
System.out.println("Time it took for a lot of bla to execute: " + (after - before)/1000.0 + " seconds.");
}
}
Und die Klasse, die die Berechnungen durchführt (unter der Annahme, dass der Code in Foo unendlich schnell ausgeführt wird):
Time it took for a lot of bla to execute: 0.0 seconds. Bla! Bla! Bla! Bla! . . . etc
Ist das Frühjahr '@ Async'? – skaffman
Tut mir leid, ja, das verwendet Spring @Async – FinalArt2005
Zeigen Sie uns die '@ Async'-Methode, und wie Sie es nennen. – skaffman