几种异步工具的演化
- new线程,
Runnable/Callable - 线程池,
Executor/ExecutorService+Future/FutureTask - ForkJoin,
ForkJoinPool - CompletableFuture
使用自定义的forkJoinPool运行parallelStream
new ForkJoinPool(16).submit(() -> list.parallelStream())
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| new线程 | 线程创建和销毁消耗资源 | ||
| 线程池 | 降低线程创建和销毁的资源消耗, 统一管理线程 | ||
| forkjoin | 使用worksteal算法, 效率高于普通线程池 | 数据集大且可拆分, 并行的子集逻辑相对独立, CPU密集 | |
| CompletableFuture | 链式写法, 支持自定义线程池 | 多个调用有逻辑依赖关系 | |
| RxJava | 链式写法, 性能比CompletableFuture高, 支持back_pressure | 学习成本高 |
发现了个很奇怪的现象,关于 parallelStream 的 - V2EX