2016-07-24 21 views
0

In ExecutorService, wie kann ich alle Threads gruppieren, die eine bestimmte Kurs-ID verarbeiten, und dann nach einem Thread-Ende-Prozess diese Kurs-ID, alle anderen Threads schließen, die im Prozess dieser Kurs-ID sind?Gruppenthreads in ExecutorService

Die Anzahl der Threads, die die Kurs-ID verarbeiten können, bis ein Thread beendet wird, ist keine feste Nummer.

Update:

So alle Fäden geben Sie diesen Kurs zu verarbeiten, ich werde sie auf eine statische Sammlung hinzuzufügen.

Angenommen, für courseid1 wird thread1 zunächst die Verarbeitung,

List l1 = new ArrayList(); 
l1.add(thread1); 

Map t = new Hashmap(); 
t.add("courseid1":l1) 

So, während thread1 in Prozess ist ein anderer Thread courseid1,

l1.add(thread2); 

Dann, wenn der Kurs Status abgeschlossen thread1 sehen zu verarbeiten kommt, Ich werde Erfolg an alle Threads in der Liste l1 senden.

+0

Die Zukunft, die Sie vom Executor bekommen, hat 'cancel' Methode, die das könnte. Natürlich müssen Sie eine Art Aufgabenregistrierung durchführen, damit Sie wissen, was Sie abbrechen müssen. – mszymborski

Antwort

2

Ich würde die parallelStream verwenden Dies wird alle Aufgaben stoppen, sobald eine fehlschlägt, oder wenn Sie angeben, dass Sie das erste Ergebnis möchten.

+0

Danke. Ich bin neu zu diesem ParallelStream in Java 8. Jeder Weg, in Ihnen Codebeispiel, was ist der Typ der Aufgaben Variable und wo ist das Mapping von, ok das sind die alle Threads, die gerade diesen Kurs verarbeiten? Wenn Sie Ihre Beispielcodezeile weiter erklären können, würde ich mich sehr freuen. – Harshana

+0

@Harshana Die 'tasks' sind eine Liste aller Aktionen, die die Threads ausführen sollen, und 'process' ist die Methode, die Sie aufrufen möchten, damit diese Verarbeitung für diese Aufgabe ausgeführt wird. –

+0

Wert zu beachten "Prozess" sollte eine reine Funktion sein (ohne Nebenwirkung). Wie ist die Anzahl der Threads, die mit dieser Lösung konfiguriert werden können? – Dici