并行流
- 🍭 多线程并发
🍭 多线程并发
🍕stream与parallelStream
下面的代码分别用了parallelStream与stream进行迭代。获取对应的每一项值,和对应的线程名称。
package top.lel.jvm.sdk.stream;import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;/*** @author echo lovely* @date 2022/4/30 11:29* @description simple stream demo*/public class StreamDemo {public static void main(String[] args) {parallelShow();}static void parallelShow() {List<String> collect = Stream.of("hello", "world", "okay", "i", "am", "your", "dad").collect(Collectors.toList());collect.parallelStream().distinct().forEach(item -> System.out.println(item + "\t" + Thread.currentThread().getName()));System.out.println("============");collect.stream().distinct().forEach(item -> System.out.println(item + "\t" + Thread.currentThread().getName()));}}
执行结果:
可以看到并行流是无序,多线程的,它的底层是ForkJoinPool, ——ForkJoinPool是自java7开始,jvm提供的一个用于并行执行的任务框架。其主旨是将大任务分成若干小任务,之后再并行对这些小任务进行计算,最终汇总这些任务的结果。
并行流底层利用了线程池。在使用它时,可以进行并行爬取资源,加快数据的封装。对数据处理时很有帮助。
普通的流,线程安全的
… 更多特性等我发掘