Java并行流示例
时间:2020-02-23 14:37:13 来源:igfitidea点击:
streamapi允许开发人员借鉴多核体系结构,通过创建并行流并使程序更快地执行操作来提高Java程序的性能。
创建并行流有两种方法:
通过使用parallelStream()方法
通过使用parallel()方法
当你使用并行流时,它们有效地使用了更多的CPU功率,这使得整个输出或者处理(如果你愿意的话)总体上更快。快得多!另外,如果我们不使用并行流进行大型计算,那么程序将只使用16个内核中的1个内核。多么低效!
订单
并行流将问题划分为多个子集(或者子问题),它们同时解决这些子集(与顺序顺序不同,它们逐个执行每个小问题)。在子问题被计算出来之后,它们的所有解被合并。
如何实施
Java允许我们通过使用诸如map之类的聚合操作来实现并行流。
import java.util.ArrayList; import java.util.List; public class Main { public static int compute(int n) { for (int i = 0; i < 10000; i++) { n = n + i; } return n; } public static void main(String[] args) { ArrayList<Integer> arrayList = new ArrayList<>(); for (int i = 0; i < 1000000; i++) { arrayList.add(i*6); } System.out.println("Added all the numbers to the arraylist."); System.out.println("Starting to add numbers..."); int result = arrayList.parallelStream().map(i -> compute(i)).reduce(Integer::sum).get(); System.out.println(reuslt); } }
在这个示例中,我们有一个示例方法,它只循环10000次,并将i添加到n中。最后,我们只返回n。在main函数中,我们创建了一个包含整数的ArrayList。然后我们创建一个巨大的循环,循环1000000次,我们在arraylist中增加i*6. 在我们添加它之后,我们有两个print语句,它们指出这个大循环已经结束。
下面这些打印声明,是有趣的部分。更具体地说,这是我们使用map函数创建并行流的地方。我们在arraylist上调用parallelStream(),对于arraylist中的每个i,我们调用compute函数并将arraylist的元素作为参数传递。最后,我们把所有的结果结合起来。
什么时候应该使用并行流
当有大量数据需要处理时
如果循序渐进的方法让你付出了代价
N(元素数)Q(每个元素的成本)应该很大