java8 lambda的并发处理

Java8的发布已经有4个月了,网上关于java8的特性的文章也有很多。其中最引人注意的当然是lambda表达式了。可惜很多文章都是浅尝辄止,或者都是复制粘贴。这里就lambda一个方面说说自己的想法。

1、有一篇文章说,java8开创了lambda表达式。这真的是误人子弟。

大家可以参考这本书:《计算机程序的构造和解释》,里面有关于lambda表达式的详细说明。在函数式编程领域,java8再怎么弄,也无法变成真正的函数式编程语言。

其实我觉得可以看看这个:λ演算(http://baike.baidu.com/link?url=W2ZYu4DmdwERX_W0L4XFsTrn7rbZV7q5_BU7mS5Bw4pfzcowQHqQYxxMGGMlD5OikFGQvI1UJej6tBAF9Mg4Hq),会更加理解lambda的由来。

2、有一篇文章说,从java8开始,java要变成函数式编程的语言了。

只能遗憾的说,这不可能。什么是函数式编程?还是那本书:《计算机程序的构造和解释》。函数式编程的定义是:[color=red]没有赋值语句的编程,叫函数式编程[/color]。

为什么不能有赋值语句?因为一个变量如果可以被改变,那么在多线程的环境中,这就是不安全的。所以,函数式编程里不允许对变量进行改变。大家了解了吧:函数式编程一开始就是面向并发处理的。

所以,网上很多文章说,函数式编程可以毫无忧虑地并发处理,原因就在这里。

如果你查找“什么是函数式编程”,恐怕大部分文章都会说“把函数当做参数来传递”(这也是误人子弟啊)。如果按照这个概念来理解,那么java将来确实会成为函数式编程的语言也说不定哦。

函数式编程语言的代表就是lisp,就是上面那本书里用的语言。那么我们用的c,c++,c#,java呢?这些语言叫“命令式编程语言”。命令式编程语言的特点就是拥有赋值语句,程序的编写与人的思维一致,容易学习---所以广泛的流行了起来。

所以,java将来会成为函数式编程的语言吗?当然不会。不过,将来肯定会吸取函数式编程的越来越多的优点。

3、最关注的是这个:有了lambda,我们就自然而然的“并发”了,高效了?

如果在网上搜索,所有的文章都会说:“由于有了lambda,java提高了并行处理的能力”
但是如果你继续搜“lambda怎么提高的并行”,几乎所有的文章都回避了这个原因的探究,给你的答案永远是:有了lambda,我们就能并行。

lambda表达式会实现并行的能力吗?
很遗憾,不行。
首先,lambda本身没有并发的能力,它只是一个语法。但是lambda的语句放到并发里,是不会有任何问题的。因为:lambda语句内涉及到的外部变量,必须是final的,也就是不可修改的。
换句话说,lambda语句涉及的变量,是不允许再次赋值来改变的---这就是函数式编程的特性。

从这个角度上来说,你的lambda部分的代码,如果放到并行的处理里,是不会有任何问题的。

但是,有哪个业务逻辑会只有一个lambda表达式呢?lisp可不一样,整个都是函数式编程的。

所以,lambda本身和并发没啥关系,它只是java新的语法。
例如这篇文章:<Java 8 并发性基础>(http://www.ibm.com/developerworks/cn/java/j-jvmc2/)里面就配合了lambda的语法特性。

新增加的stream里,有很多 xxParalle 之类的并发方法,或许会降低我们开发并发程序的成本?

或许可能。但是很难。如果你的程序本身是一个多线程的程序,你再使用 xxParalle来开几个线程,增加CPU的调度,必然会降低性能,或者性能的提升也不是很明显。

所以,不要被lambda给迷惑了,或许它是一个好的武器,但绝不是银弹。

这篇文章就很好,能让我们冷静下来的文章:<Java 8的新并行API – 魅力与炫目背后>(http://www.importnew.com/11113.html)


lambda作为java8的新特性之一,吸引了大家的眼球(虽然c#中早就有了),但是不要人云亦云,如何应用,一定要有自己的判断。


※内容如有错误,欢迎指正,谢谢
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值