Ich habe eine BlockingQueue
von Runnable
- Ich kann einfach alle Aufgaben mit einer der TaskExecutor
Implementierungen ausführen, und alle werden parallel ausgeführt werden. aber einige Runnable
hängt von anderen ab, es bedeutet, dass sie warten müssen, wenn Runnable
beenden, dann können sie ausgeführt werden.So verwalten Sie Threads im Frühjahr TaskExecutor Framework
Regel ist ganz einfach: Jeder Runnable
hat einen Code. Zwei Runnable
mit demselben Code können nicht gleichzeitig ausgeführt werden, aber wenn der Code sich unterscheidet, sollten sie parallel ausgeführt werden. Mit anderen Worten alle laufenden Runnable
müssen unterschiedliche Code haben, alle "Duplikate" sollten warten.
Das Problem ist, dass es kein Ereignis/Methode/überhaupt gibt, wenn der Thread endet. Ich baute eine solche Mitteilung in jedem Runnable
kann, aber ich mag diesen Ansatz nicht, weil es vor dem Fadenenden gerade getan wird, nicht, nachdem es
java.util.concurrent.ThreadPoolExecutor
hat afterExecute
Verfahren beendet ist, aber es muss umgesetzt werden - Frühling Verwenden Sie nur die Standardimplementierung, und diese Methode wird ignoriert.
Auch wenn ich das mache, wird es kompliziert, weil ich zwei zusätzliche Sammlungen verfolgen muss: mit Runnable
s bereits ausgeführt (keine Implementierung bietet Zugriff auf diese Informationen) und mit denen aufgeschoben, weil sie Code dupliziert haben.
Ich mag die BlockingQueue
Ansatz, weil es keine Abfrage, Thread einfach aktivieren, wenn etwas Neues in der Warteschlange ist. Aber vielleicht gibt es einen besseren Ansatz, um solche Abhängigkeiten zwischen Runnable
s zu verwalten, also sollte ich aufgeben mit BlockingQueue
und andere Strategie verwenden?
Ich mag diesen ersten Ansatz, aber es wäre besser, wenn ExecutorService zerstört wird, wenn nicht benötigt wird. – Marx