【发布时间】:2014-05-13 13:56:30
【问题描述】:
我知道这个问题听起来很傻 - 我认为 lambdas 是并行执行的,所以当我运行类似的东西时
List<Integer> list = ArrayList<Integer>();
list.add(3);
list.add(2);
list.add(1);
list.forEach(n -> System.out.println(""+n));
我不会每次都得到“3\n2\n1\n”。我试图在闭包内进行某种 sleep() ,但看起来上面的线程睡眠,而不是每个 lambda 执行。 (类似 n -> { sleep(n*1000); System.out.println(""+n)}) 无论如何可以这样做吗?还是我错了,因为应该使用一些并行流等,而不是通常不是并发列表?还是我的想法完全错误?
【问题讨论】:
-
Thread.sleep不能让任何其他线程,但当前线程睡眠。当前线程是执行 lambda 的线程。 -
如果您想测试并行性,您需要的列表元素多于三个。创建几千个,然后看看会发生什么。
-
你到底想做什么,什么没有按预期发生?
标签: java lambda closures java-8