私は、情報のためにリモートクライアントをポーリングし、その情報をリスト形式で返す呼び出し可能コードを書きました。私はthreadpoolexecutor forループを使い、Futureは複数のリモートクライアントに対して並列にタスクを実行しています。それから、私は将来のリストをすべてaddAll()と組み合わせ、巨大な結合リストを扱います。並行実行:未来対並行
私の質問は、parallelstream()を将来のループとforループを使うより効率的に使うことです。確かにコード化するのが簡単です!もし私がそのルートに行ったら、もうthreadpoolexecutorが必要でしょうか?
ありがとうございました!
for(SiteInfo site : active_sites) {
TAG_SCANNER scanr = new TAG_SCANNER(site, loggr);
Future<List<TagInfo>> result = threadmaker.submit(scanr);
//SOUND THE ALARMS
try {
alarm_tags.addAll(result.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
可能なコードは? Netbeansのは、一般parallelstream
に
active_sites.parallelstream().map((site) -> new TAG_SCANNER(site, loggr)).map((scanr) -> threadmaker.submit(scanr)).forEach((result) -> {
//SOUND THE ALARMS
try {
alarm_tags.addAll(result.get());
}
catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
});
いくつかのコードを投稿してください。 – sinu
@sinuコードが掲載されています。 – TheFunk
その実装では、あなたの現在の実装がシーケンシャルであるため、より速いでしょう。タスクをサブミットしてから、他のタスクを終了してすべてのタスクが終了するのを待つのではなく、現在のタスクが完了するのを待ってから次のタスクを実行します。だから、あなたは単一のスレッドですべてを行うことによって、より速くなるでしょう。 –