昭浅‘ Home - Stream
type: channel
link: https://zhaoqian.domcer.com/index.php/tag/Stream/
items: Stream并行流的使用

Stream并行流的使用
type: item
date: 2024-02-27T16:53:00+08:00
description: 1.Stream并行流的使用方式 1. stream().parallel() 先将集合Collection转换成Stream流的形式，再将流转换为并行流 2. parallelStream() 直接将Colletion集合转换为并行流 stream().parallel() 和 parallelStream()两种获取并行流 并且执行任务的时间消耗相差无几 可以忽略不计2.并行流使用注意!!并行流的操作大多用来处理一些cpu密集型任务，也就是说多数用来处理计算任务，而不是io任务，io任务一半交由线程层池来完成，因为线程池在执行任务时，并不会阻塞当前调用线程，而并行流却是在调用线程中执行的，在并行流中执行io操作会导致调用线程被阻塞，知道io任务结束并行流一般用于执行计算任务，如果涉及到需要使用共享可变的参数，还需要考虑线程安全的问题3.使用Stream和for循环的区别我们在需要对某一列表进行遍历时大多有两种方式，一种是for循环，另外一种就是stream,但是在使用他们时，有什么区别呢 @Test public void parallelStreamTest() { List<String> lessStringList = generateRandomString(10000); List<String> moreStringList = generateRandomString(40000); long forStart = System.currentTimeMillis(); List<String> strings = forMethod(moreStringList, lessStringList); long forEnd = System.currentTimeMillis(); System.out.println("for 循环耗时：" + (forEnd - forStart) + " ms"); long streamStart = System.currentTimeMillis(); List<String> streamStrList= streamMethod(moreStringList, lessStringList); long streamEnd = System.currentTimeMillis(); System.out.println("stream 循环耗时：" + (streamEnd - streamStart) + " ms"); long parallelStreamStart = System.currentTimeMillis(); List<String> parallelStreamStrList= parallelStreamMethod(moreStringList, lessStringList); long parallelStreamEnd = System.currentTimeMillis(); System.out.println("parallelStream 循环耗时：" + (parallelStreamEnd - parallelStreamStart) + " ms"); long streamParallelStart = System.currentTimeMillis(); List<String> streamParallelStrList= streamParallelMethod(moreStringList, lessStringList); long streamParallelEnd = System.currentTimeMillis(); System.out.println("streamParallel 循环耗时：" + (streamParallelEnd - streamParallelStart) + " ms"); } private List<String> forMethod(List<String> moreStringList, List<String> lessStringList) { List<String> addList = new ArrayList<>(); for (String productCode : moreStringList) { boolean exist = false; for (String str : lessStringList) { if (productCode.equals(str)) { exist = true; break; } } if (!exist) { addList.add(productCode); } } return ad…