Javaで並列処理。Streamインタフェースを使って、並列処理するその2。
今回は少し処理の仕方を変えてみます。
Streamインタフェースを使って、並列処理をするサンプル その2
重い処理がある風のワーカーを並列処理します。
ワーカーでは、並列処理がわかるように3秒スリープしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import java.util.ArrayList; import java.util.List; public class ParallelStreamTest2 { public static void main(String[] args) { //workerを準備 List<Worker> workerList = new ArrayList<Worker>(); for(int i=1 ; i<=10 ; i++) { workerList.add(new Worker(i)); } //workerを実行 workerList.parallelStream() .forEach(t -> t.execute()); } } class Worker{ private int id = -1; public Worker(int id) { this.id = id; } public void execute() { try { System.out.println("start.. " + id); //3秒待つ Thread.sleep(3000); System.out.println("end .. " + id); }catch(Exception e) { } } } |
実行結果
並列処理されたワーカーが、3秒のスリープ前後で標準出力します。
スリープ前後が綺麗に分かれていて、同時に実行されていることがわかります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | start.. 7 start.. 2 start.. 3 start.. 4 start.. 5 start.. 8 start.. 6 start.. 9 start.. 1 start.. 10 end .. 9 end .. 6 end .. 4 end .. 3 end .. 7 end .. 5 end .. 1 end .. 8 end .. 2 end .. 10 |
サンプルの解説
基本的には前回のサンプルと同じです。
List#parallelStream()(Collection#parallelStream())を使うことで、並列処理になります。
今回はListにWorkerクラスをセットしています。
こんな感じで並列処理したいクラスを用意しておくと、簡単に並列処理ができますね。