面试题 - parallelStream() 有什么缺点 - ForkJoinPool,它和传统的线程池(如 ThreadPoolExecutor)的区别
- 底层使用 ForkJoinPool ,不同与线程池
- 适用于连续的内存分布的数据结构,如数组和ArrayList(),并不适用于链表
- 适用于 cpu 密集的工作,cpu 的核数多效率高,并行流能否真正提高性能,很大程度上取决于系统的可用CPU 核心数。;不适用于 IO密集型
- 线程安全有调试困难程度
ForkJoinPool,它和传统的线程池(如 ThreadPoolExecutor
)的区别
- ForkJoinPool 适用于分治任务,即适用于任务被分成小块执行,执行完后将结果合并,如并行处理大型数据集、并行递归算法等。使用“工作窃取算法(work-stealing algorithm)”。这种算法允许空闲的线程从其他繁忙线程的队列中“窃取”任务。
- 线程池:适用于一般的并发场景,比如处理独立的任务队列、异步任务执行、IO密集型操作等。这些任务往往是互相独立的,并不需要分解和合并。任务通常是独立的、一次性提交的
- ForkJoinPool.commonPool():
parallelStream()
默认使用的是全局的公共 ForkJoinPool,所有调用parallelStream()
的线程默认会共享这个线程池。也叫做ForkJoinPool.commonPool()
。这个池的大小通常等于可用的 CPU 核心数。 - 线程池:线程池(如
ThreadPoolExecutor
)通常需要你自己定义和配置,比如核心线程数、最大线程数、队列容量等,且每个线程池是独立的,可以根据场景灵活调整
原文地址:https://blog.csdn.net/weixin_73512213/article/details/142423975
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!