for循环和IntStream.forEach()性能比较

1.测试代码

import java.util.stream.IntStream;

/**
 * 

@Title Test *

@Description 测试类 * * @author ACGkaka * @date 2020/4/18 7:13 */ public class Test { /** * 测试for()循环 */ private static void forTest() throws InterruptedException { for (int i = 0; i < 1_000; i++) { Thread.sleep(1); } } /** * 测试IntStream.forEach() */ private static void streamTest() { IntStream.rangeClosed(0, 1_000).forEach(i -> { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } }); } /** * 测试IntStream.parallel().forEach() */ private static void parallelStreamTest() { IntStream.rangeClosed(0, 1_000).parallel().forEach(i -> { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } }); } public static void main(String[] args) throws InterruptedException { long t1 = 0; long t2 = 0; long t3 = 0; for (int i = 0; i < 5; i++) { long start = System.nanoTime(); forTest(); long period = System.nanoTime() - start; System.out.println("forTest() \t\t\t\tspends \t" + period + "\tns"); t1 += period; start = System.nanoTime(); streamTest(); period = System.nanoTime() - start; System.out.println("streamTest() \t\t\tspends \t" + period + "\tns"); t2 += period; start = System.nanoTime(); parallelStreamTest(); period = System.nanoTime() - start; System.out.println("parallelStreamTest() \tspends \t" + period + "\tns"); t3 += period; } System.out.println("forTest() \t\t\t\t总耗时: " + t1 + "\tns; 平均耗时: " + (t1 / 5)); System.out.println("streamTest() \t\t\t总耗时: " + t2 + "\tns; 平均耗时: " + (t2 / 5)); System.out.println("parallelStreamTest() \t总耗时: " + t2 + "\tns; 平均耗时: " + (t3 / 5)); } }

2.输出结果

forTest() 				spends 	1839452800	ns
streamTest() 			spends 	1728509300	ns
parallelStreamTest() 	spends 	223115100	ns
forTest() 				spends 	1725872700	ns
streamTest() 			spends 	1713570500	ns
parallelStreamTest() 	spends 	207338200	ns
forTest() 				spends 	1689249000	ns
streamTest() 			spends 	1714935500	ns
parallelStreamTest() 	spends 	214474700	ns
forTest() 				spends 	1678805400	ns
streamTest() 			spends 	1679608600	ns
parallelStreamTest() 	spends 	214144400	ns
forTest() 				spends 	1691222600	ns
streamTest() 			spends 	1701802500	ns
parallelStreamTest() 	spends 	211717200	ns
forTest() 				总耗时: 8624602500	ns; 平均耗时: 1724920500
streamTest() 			总耗时: 8538426400	ns; 平均耗时: 1707685280
parallelStreamTest() 	总耗时: 8538426400	ns; 平均耗时: 214157920

3.结论

for() 循环 和 IntStream.forEach() 循环 没有性能差距。但是如果IntStream后面加上parallel()的并行流操作,可以根据CPU的内核数量成倍地提升速度。我的CPU是8核的,所以IntStream.parallel().forEach()的运行速度提升了8倍。

你可能感兴趣的:(Java,java)