Lambda Expressions对多核系统有哪些优势?

时间:2013-06-07 10:19:44

标签: java lambda java.util.concurrent java-8

Lambda Expressions的Java Tutorials说:

  

本节讨论Project Lambda中包含的功能   通过添加闭包来支持多核环境中的编程   和Java语言的相关功能。

我的问题是,根据多核系统和并发/并行编程,Lambda Expressions有哪些具体优势?

3 个答案:

答案 0 :(得分:8)

并行性很难实现,例如如果你有一个集合,那么你实现了一个lambda:

collection.map { // my lambda }

然后集合本身可以并行化该操作,而无需您自己进行线程处理等。并行性在集合map()实现中处理。

在纯功能(即无副作用)系统中,您可以为每个lambda执行此操作。对于非纯函数环境,您必须选择适用的lambda(因为您的lambda可能无法并行安全运行)。例如在Scala中,您必须显式获取parallel view on a collection才能实现上述目标。

答案 1 :(得分:7)

一些参考资料:

答案 2 :(得分:2)

完全尊重Java 8 lambda函数和开发人员我想问:新的是什么以及为什么它比传统的接口/方法函数方法更好?为什么它比(假设)forEach(IApply)更好:

IApply是界面

public interface IApply {
    void exec(KEY key, VALUE value);
}

它如何阻碍并行化?至少IApply的实现可以重用,继承(扩展),在静态类中实现 在我看到的几十个juniors错误的例子之后,最后一个参数是很重要的,它错过了lambda代码访问外部类的这个可能导致类在它的明确引用之后停留在内存中的原因。 从这个角度来看,对类的静态成员的引用是非常重要的(类似于C#和#34;委托和#34; s。主要是 - 从一只手 - lambda是超级封装,另一种不可重复使用同时 - 违反OOD文化的基本原则:免费访问主人的成员。从编程文化的角度来看 - 反向上世纪70年代。 功能编程? - 我明白了,但为什么混合是Java的OOP现象。 OOD有一个名为Data-Behavior解耦的精彩模式,它优雅地提供了相同的可能性?这个论点 - 就像在Java Script中一样...... nu,真的!因此,提供工具以在Java中嵌入Java Script并在Java Script中编写系统块。所以我仍然没有看到真正的好处,就像广告浪潮一样。