2016-07-24 4 views
0

ExecutorServiceでは、特定のコースIDを処理するすべてのスレッドをグループ化し、そのコースIDを1つのスレッドが処理し終えると、そのコースIDの処理中にある他のスレッドをすべて閉じることができますか?ExecutorService内のグループスレッド

1つのスレッド終了プロセスまでコースidを処理できるスレッドの数は固定数ではありません。

更新:

だから、任意のスレッドがこのコースを処理するために入力して、私は静的なコレクションに追加するつもりです。

、コースの状態が完全であることがわかりスレッド1一度次に、スレッド1が処理中にcourseid1ため、スレッド1は当初、

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

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

を処理しているので、別のスレッドがcourseid1を処理するために来る

l1.add(thread2); 

を仮定私はリストl1のすべてのスレッドに成功を送ります。

+0

将来、実行者から取得するには、それを実行できる「キャンセル」メソッドがあります。もちろん、あなたは何をキャンセルするかを知るために、何らかのタスクレジストリを維持しなければならないでしょう。 – mszymborski

答えて

2

私はparallelStreamを使用します。これは、1つが失敗した場合、または最初の結果が必要な場合にすべてのタスクを停止します。

+0

ありがとうございます。私はjava 8でこのparallelStreamを初めて使っています。どのようにしても、あなたのコードサンプルでは、​​タスク変数のタイプは何ですか、そしてどこでマッピングされていますか、これは現在このコースを処理しているすべてのスレッドですか?あなたのサンプルコード行をさらに説明できるなら、私は多くのことに感謝します。 – Harshana

+0

@Harshana 'tasks'は、スレッドが実行するすべてのアクションのリストです。' process'は、そのタスクの処理を行うために呼び出すメソッドです。 –

+0

'process'は純粋な関数(副作用なし)でなければなりません。また、このソリューションではスレッドの数をどのように設定することができますか? – Dici

関連する問題