首先我们做一个测试
下面流中的map和forEach函数式接口方法
通俗来讲,map其实就是类型转换的作用,
我只是测试所以还是返回的数组,forEach我用作输出控制台
int[] ints ={1,2,3};
Arrays.stream(ints).map(arr->{
int i=0; i++;
System.out.println(i+"次");
return arr;}).forEach(System.out::println);
下面是执行结果
//执行结果
1次
1
1次
2
1次
3
可以看出其实Stream底层是多线程运行的,有多少数据需要处理就创建多少个线程,而且是并发的,当某线程运行完成,会进入等待状态,等待它线程执行完成,然后以正确的顺序得到结果,之间是没有任何关系的,各运行各自的,但是数据是安全的,至于是不是上了锁,怎么实现的 我就没有没有时间研究了
通过Stream.of方式测试
Stream.of(1,2,3).map(arr->{
int i=0; i++;
System.out.println(i+"次");
return arr;}).forEach(System.out::println);
执行结果
还是一样的
1次
1
1次
2
1次
3
然后还有就是不论,你的数据在一次Stream执行中增加多少个,它执行的次数(线程数)永远只会是你创建Stream时的数据个数,作为依据.