Ich habe eine Reihe von Runnables, die ich in mehreren Threads ausführen möchte, und einige sind abhängig von anderen abzuschließen, bevor sie beginnen. Ich habe ein einfaches Dienstprogramm dafür geschrieben, aber gibt es eine Bibliothek, die diese Fähigkeit bereits bietet?Gibt es eine Java-Bibliothek zum Planen abhängiger Runnables (in einer Abhängigkeits-DAG angegeben)?
Gibt es eine Java-Bibliothek zum Planen abhängiger Runnables (in einer Abhängigkeits-DAG angegeben)?
Antwort
können Sie ein CountDownLatch verwenden, um die Aktivitäten von Fäden
Nützliche Antwort, obwohl es nicht eine einfache API bietet, um abhängige Aufgaben auszuführen. – jonderry
Das scheint ein einfaches Problem zu sein, dass das Rollen deines eigenen Systems nicht zu schlecht wäre (und jede andere Bibliothek wird übertrieben sein). Ich würde es implementieren, indem ich eine Klasse habe, die als "Knoten" agiert - sie umschließt ein Runnable, und sie kennt ihre Abhängigkeiten und Abhängigkeiten und hat auch ein "CountDownLatch" für die Koordination. Dann eine andere Klasse, um eine Menge davon aufzunehmen, eine Gesamtordnung über sie zu berechnen und sie einem Executor in dieser Reihenfolge zuzuführen (um Deadlock zu verhindern). –
„einige von anderen abhängig zu beenden, bevor sie beginnen,“ zu koordinieren.
Ich nehme an, dies bedeutet, dass einige Aufgaben Ergebnisse anderer Aufgaben als Eingabeargumente verwenden. Wenn ja, suchen Sie nach "Java-Datenfluss" oder "Java-Workflow".
Wenn Eingabeargumente für jede Aufgabe mit einer einzelnen sequenziellen Warteschlange dargestellt werden können, wird diese spezielle Art von Datenfluss als "Akteurmodell" bezeichnet. Suchen Sie daher nach "Java-Actor-Bibliothek oder Framework".
Insbesondere unterstützt ein Opensource-Projekt von mir df4j sowohl Datenfluss und Schauspieler Stile.
Ist Prozess-Engine wie [tag: activiti] oder [tag: jbpm] ein Overkill für Sie? –
Java3D hat so etwas, aber ich weiß nicht wo –
@Tomasz, danke für die Zeiger. Ja, das sind wahrscheinlich Overkills. – jonderry