2016-07-24 37 views
0

在ExecutorService的,我怎麼能組的所有線程處理特定課程ID,然後在一個線程中完成的過程,當然ID,請關閉所有其它線程這是在此過程中ID的過程?集團線程的ExecutorService

能夠處理過程ID,直到一個線程結束處理的線程數,不是一個固定的數目。

更新:

因此,任何線程進入處理此過程中,我將它們添加到一個靜態集合。

假設爲courseid1,線程1最初處理,

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

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

所以,當線程1是在進程中的另一個線程來處理courseid1,

l1.add(thread2); 

然後,一旦線程1看到課程狀態爲完成,我將成功發送到列表l1中的所有線程。

+0

您從執行者獲得的未來具有'cancel'方法,可能可以做到這一點。當然,你必須維護某種任務註冊表,以便知道要取消什麼。 – mszymborski

回答

2

我會用parallelStream一旦一個失敗,這將停止所有的任務,或者如果你指定要第一個結果。

Optional<Result> res = tasks.parallelStream().map(t -> process(t)).findFirst(); 
+0

謝謝。我是新來這個parallelStream在Java 8.任何方式,你的代碼示例是什麼任務的類型變量,其中是的映射,確定這些是當前正在處理此過程中的所有線程?如果你可以進一步解釋你的示例代碼行,我會很感激。 – Harshana

+0

@Harshana的'tasks'是你想要的所有線程來執行和'process'是要打電話做出處理髮生該任務的方法操作的列表。 –

+0

值得注意的'process'應該是一個純函數(沒有副作用)。另外,如何使用此解決方案來配置線程的數量? – Dici