Java并发编程全面解析
1. 并行流与顺序流的转换
在Java中,可以通过调用 parallel()
方法将顺序流转换为并行流,同样,调用 sequential()
方法可以将并行流转换为顺序流。例如以下代码:
List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5);
System.out.println(ints.parallelStream().filter(i -> (i % 2) == 0).sequential().isParallel());
这段代码的输出结果是 false
。原因是虽然创建的是并行流,但调用 sequential()
方法后,流就变成了顺序流,所以调用 isParallel()
方法返回 false
。
2. 正确的归约操作
使用并行流时,避免依赖全局状态非常重要,即计算应该是“无副作用”的。下面是一个错误使用流的例子:
import java.util.Arrays;
class StringConcatenator {
public static String result = "";
public static void concatStr(String str) {
res