public class Test { public static void main(String[] args) { Test test = new Test(); // 多线程状况 test.test1(); // 单线程状况 // test.test2(); } public void test1() { List<String> list = new ArrayList<>(); for (int i = 0; i < 10000; i++) { list.add(String.valueOf(i)); } // for循环 long startTime = System.currentTimeMillis(); for (Object s : list) { s.toString(); } long endTime = System.currentTimeMillis(); System.out.println("for循环用时:" + (endTime - startTime)); // lambda 表达式 long startTime1 = System.currentTimeMillis(); list.parallelStream().forEach((s) -> { s.toString(); }); long endTime1 = System.currentTimeMillis(); System.out.println("lambda表达式用时:" + (endTime1 - startTime1)); } public void test2() { List<String> list = new ArrayList<>(); for (int i = 0; i < 10000; i++) { list.add(String.valueOf(i)); } // for循环 long startTime = System.currentTimeMillis(); for (Object s : list) { try { Thread.sleep(4); } catch (InterruptedException e) { e.printStackTrace(); } s.toString(); } long endTime = System.currentTimeMillis(); System.out.println("for循环耗时:" + (endTime - startTime)); // lambda表达式 long startTime1 = System.currentTimeMillis(); list.parallelStream().forEach((s) -> { try { Thread.sleep(4); } catch (InterruptedException e) { e.printStackTrace(); } s.toString(); }); long endTime1 = System.currentTimeMillis(); System.out.println("lambda耗时:" + (endTime1 - startTime1)); } }
多线程操做时的结果:数据库
foreach比lamdba快,list.parallelStream()是并发处理的,大量的线程上下文切换致使性能降低。多线程
单线程操做结果:并发
总结:对于耗时的操做用lambda表达式的for循环,如数据库的IO操做,多线程充分利用CPU资源;对于不太耗时的操做使用普通for循环,好比纯CPU计算类型的操做,单线程性能更高,减小上下文切换的开销。 性能