2014-04-02 49 views
0

我知道,这个问题听起来很愚蠢 - 我认为lambda表达式是并行执行的,所以当我运行像睡眠 - 的Java 8 Lambda表达式

List<Integer> list = ArrayList<Integer>(); 
list.add(3); 
list.add(2); 
list.add(1); 
list.forEach(n -> System.out.println(""+n)); 

我woud不会得到“3 \ N2 \ N1 \ n“每次。我试图在闭包中做一些sleep(),但它看起来像睡在上面的线程,而不是每个lambda执行。 (类似n - > {sleep(n * 1000); System.out.println(“”+ n)})这可以做到吗?或者我错了,因为应该使用某些并行流等,或者不使用连续列表?或者我的想法总是错误的?

+0

'Thread.sleep'不能使任何其他线程,但当前的一个睡眠。当前线程是lambda执行的线程。 –

+0

如果你想testride并行性,你需要多于三个列表元素。创建几千个,然后看看发生了什么。 –

+0

你想要做什么,以及没有按预期发生的事情? – Joffrey

回答

1

forEach应用于Iterable通常是按顺序执行的。如果你想并行执行,你需要创建一个并行流:list.parallelStream().forEach(...)