Java 8 函数式编程:并行优化与性能提升
1. 并行化代码的飞跃
在处理代码时,有时需要对其进行并行化以加快执行速度。以获取股票价格并找出高价股票的代码为例,原本的代码执行流程如下:
- 通过map()方法处理股票代码列表,依次调用函数从雅虎获取价格。
- 所有价格获取完成后,依次筛选出价格处于期望范围内的股票。
- 最后,从筛选后的股票中选出价格最高的股票。
在这三个操作中,第一个操作最慢,因为它涉及网络请求,存在网络延迟,并且每个股票代码都要执行一次该操作。不过,这些耗时操作相互独立,可以同时执行。
原始顺序执行代码的运行时间受网络连接质量影响,在无线网络下,查找价格低于 500 美元的最高价格股票大约需要 17 秒多。
High priced under $500 is ticker: AMZN price: 376.640 real 0m17.688s user 0m0.269s sys 0m0.053s将代码并行化需要考虑如何操作以及如何正确操作。可以借助库来管理线程,但确保代码正确执行的责任在于我们自己。竞态条件主要源于共享可变性,遵循良好的函数式风格并保持不可变性可以避免这些问题。
令人惊讶的是,只需将一个调用从findHighPriced(Tickers.symbols.stream());改为findHighPriced(Tickers.symbols.parallelStream