for文をマルチスレッドで実行 (Java Day Tokyo 2013)

Java Day Tokyo 2013 の午前中のセッションで印象の残ったコードをメモ。

for (Shape s : shapes) {
 if (s.getColor() == BLUE)
   s.setColor(RED);
}

シンプルだし一般的でもあるのですが、Collectionが大きい。
でも並列処理がこれだと出来ない。
それはシリアル用にかかれているため。

shapes.forEach(s -> {
 if (s.getColor() == BLUE)
  s.setColor(RED);
});

複数のプロセッサで処理できるようになる。

巨大な1つのCollectionを並列処理できるなんて、なんかすごい魅力的に思えるのは僕だけでしょうか。
まあきっとこの実装をする上でいくつかお作法は生まれるのでしょうけど。
あとは並列にできるからーと超巨大Collection用意してJVM落とすとか。

CPUやメモリ、言語の処理速度が向上したことで細かい配慮をする人が減ってきたんじゃないかな。。
#多少変に書いても頑張って処理してくれるし、どうしても遅けりゃクラウドだ、みたいな。


JDK1.3や1.4のころのような気遣いを少しでもすることで全然変わってくるんでしょうけどね。

http://instagram.com/p/ZRurdTIaaw/