几种异步工具的演化
- 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