安易にparallelStreamを使って失敗した話

最近、今更ながらJava8を触っているのですが、
parallelStreamを使うと並列処理ができると聞きまして、
「それならstreamでやったところをparallelStreamに置き換えたら速くなるんじゃん?」
とか安易に考えまして、こんなコードを書いてみました。

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;


public class Calculate {
	public void run(){
		List<Integer> list = IntStream.range(1, 1000000).boxed().collect(Collectors.toList());

		list.stream()
			.map(x -> x * x)
			.collect(Collectors.toList());

	}
}
// parallelStreamの場合
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


public class ParallelTest {
	public static void main(String args[]){
		List<Calculate> list = new ArrayList<Calculate>();

		list.add(new Calculate());
		list.add(new Calculate());
		list.add(new Calculate());
		list.add(new Calculate());
		list.add(new Calculate());

		Date in = new Date();

		list.stream()
			.forEach(x -> x.run());

		Date out = new Date();

		System.out.println(out.getTime() - in.getTime());
	}
}
// streamの場合

import java.util.ArrayList;
import java.util.Date;
import java.util.List;


public class StreamTest {
	public static void main(String args[]){
		List<Calculate> list = new ArrayList<Calculate>();

		list.add(new Calculate());
		list.add(new Calculate());
		list.add(new Calculate());
		list.add(new Calculate());
		list.add(new Calculate());

		Date in = new Date();

		list.stream()
			.forEach(x -> x.run());

		Date out = new Date();

		System.out.println(out.getTime() - in.getTime());
	}
}

1から100000までの値をただただ二乗するメソッドをもつクラスをつくり、
parallelStreamとstreamでそれぞれ実行してみたのですが、
streamでのテストが平均300msほどであったのに対し、parallelStreamは平均3000msほどかかりました。

正直、parallelStreamは並列処理になるので速いはず!
くらいの考えで書いたので、うまくいかないのもしょうがないかなあという気もするんですが、
ネクストアクションはどうしようかな……

「並列処理 Java」とか「parallelStream」で検索してみるかな、とりあえず。