初识多线程以及遇到的实际问题

本文揭示了Java新手常遇的Stream并行流陷阱,特别是在任务涉及长时间等待时,可能导致程序不定期阻塞。文章深入探讨了并行流底层实现——ForkJoinPool的工作原理,并提出了解决方案,建议在特定场景下改用传统线程池。

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

慎用Java stream 的parallel

对于Java新手来说,Java的 stream提供的parallel是一个不小的坑。项目中遇到有人在使用,task为sleep一段时间。结果就是程序跑起来会不定期出现阻塞。

Java stream的parallel底层实现

有一种线程池叫ForkJoinPool,基本思想是实现一个“work stealing“算法,java stream的 parallel在底层都是用这样的一个static的pool来提交task,thread数与可用cpu 核心数有关。项目中所有用到stream的地方都用这个pool。

解决问题

偏偏用这个parallel的时候task是sleep一段时间,所以会经常阻塞。最后用常用线程池解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值