初识多线程以及遇到的实际问题
慎用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一段时间,所以会经常阻塞。最后用常用线程池解决。