个人测试Stream底层原理与逻辑

本文通过测试展示了Java Stream在处理数据时的并发特性,底层创建与数据量相等的线程并并发执行。Stream.map进行类型转换,forEach用于输出,执行过程中各线程独立运行,但数据处理保持安全。Stream.of创建的流,其执行次数固定为初始化时的数据个数,即使map中生成更多数据,forEach也只按原数据量执行。通过分析执行流程和逻辑结构,揭示了Stream操作的内在机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们做一个测试

下面流中的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时的数据个数,作为依据.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值