【发布时间】:2014-05-01 15:04:19
【问题描述】:
在尝试学习 Java lambdas 时,我遇到了一篇文章(如下所列),其中在有关流 API 限制的部分下,他指出:“有状态的 lambdas 通常在顺序执行时不是问题,但是当流执行是并行的,它会中断”。然后,他给出了这段代码作为执行顺序问题的示例:
List<String> ss = ...;
List<String> result = ...;
Stream<String> stream = ss.stream();
stream.map(s -> {
synchronized (result) {
if (result.size() < 10) {
result.add(s);
}
}
})
.forEach(e -> { });
我可以看到如果它被并行化,这将是如何不确定的,但我看不到你将如何使用无状态 lambda 来解决这个问题 - 是否存在将东西添加到一个固有的不确定性?以并行方式列出。一个戴帽子的六岁孩子可以理解的例子,也许是 C#,将不胜感激。
原文链接http://blog.hartveld.com/2013/03/jdk-8-33-stream-api.html
【问题讨论】:
-
有什么问题?您想了解如何使用 Java 8 并行流为第一个然后项执行一些代码吗?或者你想了解,fork-join 算法是如何工作的,如何规避共享数据的问题?
-
后者在无状态 lambda 的上下文中。
标签: java lambda parallel-processing java-8