Lambda项目:迈向多核及超越

周一下午在JavaOne 2011的希尔顿旧金山大宴会厅B上做了“ Project Lambda:迈向多核和超越”(会议27400,不要与Brian Goetz的同名演讲相混淆) 的演示 。大宴会厅关闭,这是一个非常大型的非主题演讲场地,并且有一台大型摄像机(配有摄像机操作员)准备对演示文稿进行拍摄。 这可能可以解释为意味着会议组织者对Java SE 8 ( JSR 337 )和Lambda项目的报道产生了极大的兴趣。 演讲者Alex Buckley (Java语言和虚拟机的规范负责人)和Daniel Smith (项目Lambda规范负责人)是演示者,接下来将演示本演示文稿的摘要。

本课程涵盖Java SE 8的主要新语言功能-lambda表达式,方法引用和扩展方法-并探讨现有和将来的库将如何利用它们来使客户端代码同时具有更高的性能和更少的错误。 -易于。

功能接口是“一种方法的接口”。 Lambda表达式是“创建功能接口实现的一种方式”。 Lambda表达式允许简单,简洁地表达功能的“实质”,尤其是与匿名类的膨胀相比。 几张幻灯片中包含一些代码示例,这些代码示例显示了我们今天将如何进行处理,而lambda表达式所支持的表示更为简洁。
Lambda表达式“可以引用封闭范围内的任何有效最终变量。” 这意味着final关键字不是必需的,而是需要在lambda表达式引用的方法中将其视为final(未分配引用)。 宣布了更多的lambda表达式规则: this指针引用了封闭对象而不是lambda表达式。 “无需在lambda表达式中使用参数类型”,因为它们是“根据功能接口的方法签名来推断的”(无需动态键入)。 方法引用支持“将方法作为Lambda表达式使用”的“重用”。
Buckley谈到外部迭代是Java库中当前的主要方法。 在这种习惯用法中,“客户端决定迭代”并且“不是线程安全的”。 他谈到了引入并行for循环来解决此问题的缺点,但从并行for方法中提取了一些概念:“过滤器”和“归约器”。 Buckley引入了“内部迭代有助于并行习语”的想法,因为它不需要串行执行并且是线程安全的。
Java 8面临的问题之一是需要改造库以使用lambda表达式,但是它们已经定义了在库和集合中大量使用的接口。 可以用来解决此问题的一种方法是在Java中使用静态扩展方法,类似于C#中可用的方法。 这种方法有很多优点,但是也有一些主要的缺点,例如无法使用反射。 决定重新考虑“不能向接口添加操作”的“规则”。 基于此,随后的决定是添加虚拟扩展方法 ,该方法在接口中提供默认实现,该接口仅在接收器类未使用默认实现覆盖该方法时使用。
幻灯片标题为“您是否向Java添加了多个继承?!” 指出“ Java一直具有类型的多重继承”和“现在具有行为的多重继承”,但仍不支持“状态的多重继承,这会导致大多数问题。” 幻灯片补充说:“行为的多重继承是相当良性的”,而且仅当编译分多个步骤进行时,这确实是一个问题。 在本演示文稿中强调了扩展方法是语言功能和虚拟机功能(“关于继承和调用的其他所有内容都是VM功能!”)。 为此,项目符号指出:“如果需要,调用界面将消除多种行为的歧义。” 非Java JVM语言可以“共享财富”扩展方法,其中有一张幻灯片提供了三个示例。
Daniel Smith主持了有关并行库主题的演示。 他展示了一张幻灯片“ Betain the New Iterable”,其中展示了一个Iterable接口,其中包括isEmpty()forEachfiltermapreduceinto 。 他还展示了Iterable通过扩展方法parallel()获得的Parallelterable接口上的幻灯片。
Smith在其关于社区贡献的幻灯片中提供了对JSR 335,JSR 166和Lambda项目的引用。 他还列举了JavaOne 2011上另外四个关于lambda表达式和紧密相关主题的会议。 Smith结束时引用了Brian Goetz在Lambda项目上的一句话 : …我们相信,对Java开发人员来说,我们能做的最好的事情就是向他们轻柔地推动编程的功能化。 我们不会将Java变成Haskell,甚至不会变成Scala。 但是方向很明确。  
结论
Smith的示例清楚地表明,lambda表达式将为Java开发人员的日常工作提供巨大的好处。 他展示了我们都必须编写数百或数千次的循环类型以及lambda表达式使之更简洁,更简洁的语法。 该演示文稿已经清楚地表明,随着引入lambda表达式,Java将在流畅性和简洁性方面获得动态类型语言所享有的许多好处。
参考: JavaOne 2011:Lambda项目:在我们的JCG合作伙伴 Dustin Marx的启发下 ,在Real Events博客上得到了Lambda的超越 。

翻译自: https://www.javacodegeeks.com/2012/08/project-lambda-to-multicore-and-beyond.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 06-字典

字典是一种key-value的数据类型,就像日常用的字典,通过字母或者笔画来查找对应页的详细内容。 字典是无序的,没有顺序。因为有key。 info {stu1001:wang er,stu1002:zhang san,stu1003:li si } print(info)#打印字典所有kv print(info[stu10…

hashMap 源码解读理解实现原理和hash冲突

hashMap 怎么说呢。 我的理解是 外表是一个set 数组,无序不重复 。 每个set元素是一个bean ,存着一对key value 看看代码吧 package test;import java.util.HashMap; import java.util.Map.Entry;public class HashMaptest {public static void main(Str…

浙江大学linux网络通信,浙江大学钟财军副教授——“Wireless Powered Communication Networks”...

2016年5月17日,浙江大学钟财军副教授应徐正元教授邀请在中科大西区科技实验楼东楼十层1011会议室做了一场题为“Wireless Powered Communication Networks”的学术报告。报告会由龚晨教授主持,共50余名师生参加。此次报告会得到了“中科院无线光电通信重…

自定义Spring Data JPA存储库

Spring Data是一个非常方便的库。 但是,由于该项目是一个相当新的项目,因此功能不佳。 默认情况下,Spring Data JPA将基于SimpleJpaRepository提供DAO的实现。 在最近的项目中,我开发了一个定制的存储库基类,以便可以在…

[基础]PeopleSoft中的作业和调度作业集合定义

PeopleSoft进程调度器可以使一个或多个进程作为一个组。这个组在PeopleSoft中被称为作业(Job)。 PeopleSoft进程被定义为单个任务,程序或例程,例如cobol程序或AE程序或客户端运行的SQR。 作业由一个或多个相同或不同类型的进程组成,他们作为一…

体验 WebFont,网页上的艺术字

在最新项目中,由于要频繁使用艺术字,而用户设备没有此字体,因此以往的经验都是使用图片...所以在同事的瞩目期许之下,我开始实验研究这个问题的解决方案1. 直接使用字体文件font-face {font-family: xxxx;src: url(../img/汉仪秀英…

linux文件分别打包命令,Linux文件打包命令

15.1 gzipgzip(1)是GNU的压缩程序。它只对单个文件进行压缩。基本用法如下:$ gzip filename程序执行以后,文件名会变成filename.gz,而且一般情况下大小会比原文件要小。注意,程序并不新建一个新的文件filename.gz,而是将filename变…

Play 2.0框架和XA交易

XA事务非常有用,而且开箱即用,今天的Play 2.0不支持它们。 在这里,我展示了如何添加该支持: 首先,介绍一些XA有用的示例: –如果您使用来自两个不同persistence.xml的实体,则JPA使用两个物理连…

java代码注释规范

java代码注释规范 一、规范存在的意义 应用编码规范对于软件本身和软件开发人员而言尤为重要,有以下几个原因:1、好的编码规范可以尽可能的减少一个软件的维护成本 , 并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开…

win10 hyper-v 虚拟机ping不通宿主机问题

在Windows10 Hyper-V 中安装 Linux (Centos6.9)虚拟机无法 ping 通宿主机 这种情况下关闭 Windows 防火墙就能ping通了,当然关闭防火墙不安全。所以需要 做以下步骤: 控制面板-》系统和安全-》Windows防火墙-》高级设置-》入站规则 启用下图被红框选中的两个选…

linux方法参数,Linux的sysctl 命令 参数

Linux内核通过/proc虚拟文件系统向用户导出内核信息,用户也可以通过/proc文件系统或通过sysctl命令动态配置内核。比如,如果我们想启动NAT,除了加载模块、配置防火墙外,还需要启动内核转发功能。我们有三种方法:1. 直接…

Java枚举:您拥有优雅,优雅和力量,这就是我所爱!

当Java 8即将面世时,您确定您对Java 5中引入的枚举很了解吗? Java枚举仍然被低估了,很可惜,因为它们比您想象的要有用,它们不仅仅用于通常的枚举常量! Java枚举是多态的 Java枚举是可以包含行为甚至数据的…

C#删除和清空文件夹的程序

/// <summary>/// 清空指定的文件夹&#xff0c;但不删除文件夹/// </summary>/// <param name"dir"></param>private void DeleteFolder(string dir){foreach (string d in Directory.GetFileSystemEntries(dir)){if (File.Exists(d)){try{…

2)网页请求顺序

&#xff08;1&#xff09;分析浏览器访问一个网页的完整流程逻辑过程&#xff1a;http&#xff1a;//www.abc.com/def/ 转载于:https://www.cnblogs.com/xiaoyoucai/p/7306246.html

JavaOne 2012:非阻塞数据结构如何工作?

当我查看今天的日程安排时&#xff0c;我感到有些惊讶&#xff0c;并指出我目前计划今天参加的所有会议都在希尔顿举行。 当我意识到JavaOne演示文稿中大约有一半是在希尔顿酒店中并且似乎按路线大致定位时&#xff0c;这变得有些不足为奇了。 Tobias Lindaaker &#xff08; 新…

c语言箭头指针的作用,C语言中,结构体成员变量的点和箭头

C语言中&#xff0c;调用成员变量用点还是用箭头&#xff0c;取决于当前的ID是指针还是结构体本身。如&#xff1a;typedef struct {float height;float weight;} Person;int main(int argc, char *argv[]) {Person jiushen;Person *lengleng (Person *)malloc(sizeof(Person)…

JavaOne 2012:调查JVM水晶球

我回到了希尔顿的A / B广场参加星期一的第四届会议&#xff0c;但首先去了希尔顿的顶层收拾午餐。 我每年都在JavaOne的第一天被提醒&#xff0c;涉及到每个人的第一天的午餐获取过程令人惊讶地令人沮丧。 我知道我在JavaOne的第一年的经历使我有些困惑&#xff0c;因为我不确定…

测试遇到的问题

多人合作测试 多人员合作测试&#xff0c;应尽量保证测试平台统一&#xff0c;处理流程统一&#xff0c;相互之间保持实时沟通。问题的处理进度应保证所负责的所有测试人员第一时间实时更新。 多人测试应做到2人或以上进行交叉测试。 转载于:https://www.cnblogs.com/liuliu-wo…

Jquery Memo

jQuery选择器 $( "#id" ) $( ".class" )$( "element" )全选择器&#xff08;*选择器&#xff09; * {padding: 0; margin: 0;}//子选择器 //$(div > p) 选择所有div元素里面的子元素P//后代选择器 //$(div p) 选择所有div元素…

c#语言输出字符串长度,C#统计字符长度(汉字占2个字符)

在C#编程过程中&#xff0c;通过String类的Length属性可以获取对应字符串的长度&#xff0c;但是细心的读者可能注意到了&#xff0c;String类的Length属性返回的是字符串中Char对象的个数&#xff0c;也就是说&#xff0c;一个汉字的长度为1&#xff0c;对此&#xff0c;MSDN的…