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计算类型的操作,单线程性能更高,减少上下文切换的开销。