q7goodies事例_Java 8 Friday Goodies:精益并发

q7goodies事例

在Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经写了一些关于Java 8好东西的博客 ,现在我们觉得是时候开始一个新的博客系列了,……

Java 8星期五

每个星期五,我们都会向您展示一些不错的教程风格的Java 8新功能,这些功能利用了lambda表达式,扩展方法和其他出色的功能。 您可以在GitHub上找到源代码 。

Java 8 Goodie:精益并发

曾经有人说过(不幸的是,我们没有消息来源了):

初级程序员认为并发很难。
经验丰富的程序员认为并发很容易。
高级程序员认为并发很难。

没错 但好的一面是,Java 8至少会通过使使用lambda和许多改进的API编写并发代码更加容易而至少会改善性能。 让我们仔细看看:

Java 8在JDK 1.0 API上的改进

从JDK 1.0开始就已经存在java.lang.Threadjava.lang.Runnable也是如此,它将在Java 8中用FunctionalInterface进行注释。

从现在开始,如何最终将Runnable提交到Thread几乎是不费吹灰之力。 假设我们有一个长期运行的操作:

public static int longOperation() {System.out.println("Running on thread #"+ Thread.currentThread().getId());// [...]return 42;
}

然后,我们可以通过各种方式将此操作传递给Threads ,例如

Thread[] threads = {// Pass a lambda to a threadnew Thread(() -> {longOperation();}),// Pass a method reference to a threadnew Thread(ThreadGoodies::longOperation)
};// Start all threads
Arrays.stream(threads).forEach(Thread::start);// Join all threads
Arrays.stream(threads).forEach(t -> {try { t.join(); }catch (InterruptedException ignore) {}
});

正如我们在之前的博客文章中提到的那样,lambda表达式找不到解决受检异常的精益方法真是可惜。 java.util.function包中新添加的功能接口均不允许抛出已检查的异常,从而将工作留给了调用站点。
jool-logo-黑色
因此,在上一篇文章中 ,我们发布了jOOλ(也称为jOOL,jOO-Lambda) ,它将每个JDK的功能接口包装在一个等效的功能接口中,该功能接口允许引发检查异常。 这对于旧的JDK API(例如JDBC)或上述Thread API尤其有用。 使用jOOλ ,我们可以这样写:

// Join all threads
Arrays.stream(threads).forEach(Unchecked.consumer(t -> t.join()
));

Java 8在Java 5 API上的改进

在Java 5出色的ExecutorService发行之前,Java的多线程API一直处于Hibernate状态。 管理线程一直是一个负担,人们需要外部库或J2EE / JEE容器来管理线程池。 使用Java 5可以轻松得多。现在,我们可以 RunnableCallable 提交ExecutorService ,后者可以管理自己的线程池。

这是一个示例,说明如何在Java 8中利用这些Java 5并发API:

ExecutorService service = Executors.newFixedThreadPool(5);Future[] answers = {service.submit(() -> longOperation()),service.submit(ThreadGoodies::longOperation)
};Arrays.stream(answers).forEach(Unchecked.consumer(f -> System.out.println(f.get())
));

注意,我们如何再次使用jOOλ中的UncheckedConsumer将从get()调用引发的已检查异常包装在RuntimeException

Java 8中的并行和ForkJoinPool

现在,Java 8 Streams API在并发性和并行性方面发生了很多变化。 例如,在Java 8中,您可以编写以下代码:

Arrays.stream(new int[]{ 1, 2, 3, 4, 5, 6 }).parallel().max().ifPresent(System.out::println);

尽管在这种特殊情况下没有必要,但仍然有趣的是,仅调用parallel() 即可在您的JDK内部ForkJoinPool的所有可用线程上运行IntStream.max() reduce操作,而无需担心涉及ForkJoinTasks 。 这可能非常有用,因为并非所有人都欢迎JDK 7 ForkJoin API引入的复杂性 。

在这篇有趣的InfoQ文章中了解有关Java 8并行流的更多信息。

有关Java 8的更多信息

并行是新Streams API背后的主要驱动力之一。 在许多情况下,能够仅在Stream上设置一个名为parallel()的标志是非常了不起的。

在上一个示例中,我们看到了OptionalInt.ifPresent()方法,该方法在先前的reduce操作成功的情况下执行IntConsumer参数。

其他语言,例如Scala,都知道一种“选项”类型可以改善NULL处理。 我们之前已在博客上介绍了Optional ,我们将在Java 8 Streams的上下文中重申Java 8 Optional类型,敬请期待!

同时,请查看Eugen Paraschiv出色的Java 8资源页面

翻译自: https://www.javacodegeeks.com/2014/03/java-8-friday-goodies-lean-concurrency.html

q7goodies事例

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

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

相关文章

【渝粤教育】国家开放大学2018年春季 0700-22T中级会计实务(一) 参考试题

科目编号:0700 座位号 2017-2018学年度第二学期期末考试 中级会计实务(一) 试题 2018年 7 月 一、单选题(本大题共10小题,每小题3分,共计30分) (★请考生务必将答案填入到下面对应序…

工业交换机的外壳设计重要吗?

工业交换机一般使用在环境比较恶劣的地方,例如工厂等,为了让工业交换机更好的使用,工业交换机的外壳设计起到至关重要的作用,工业交换机的外壳可以更好的保护工业交换机的使用,那么如何才能选到实用的工业交换机外壳呢…

java 邮件 超链接_将Excel范围中的超链接传输到Outlook电子邮件

我正在尝试从excel范围(rng 1到6)创建一个电子邮件,其中包含A列和D列中每个单元格的超链接 . 以下是为这些范围创建超链接的代码示例 . 一切正常 .ActiveSheet.Hyperlinks.Add Anchor:ActiveWorkbook.Sheets("Overdue").Range("A" & D2), _…

【渝粤教育】国家开放大学2018年春季 3818-22T燃气工程施工 参考试题

科目编号:3818 座位号 2017-2018学年度第二学期期末考试 燃气工程施工 试题 2018年 7 月 一、填空题(本大题共10空,每空3分,共计30分) 1.常用沟槽断面有___________________、、、联合槽四种形式。 2&…

【渝粤教育】国家开放大学2018年春季 7140-22T危急重症护理学(本) 参考试题

编号:7140 座位号 2017~2018学年度第二学期期末考试 危急重症护理学试题 2018年07月 一、名词解释(每题5分,共20分) 甲状腺危象 中毒 心肺脑复苏 惊厥 二、填空 (每空3分,共30分&#xff…

工业交换机和工业4G路由器的区分

工业交换机也称作工业以太网交换机,即应用于工业控制领域的以太网交换机设备,由于采用的网络标准,其开放性好、应用广泛以及价格低廉、使用的是透明而统一的TCP/IP协议,以太网已经成为工业控制领域的主要通信标准。工业交换机具有…

java 包装类方法总结_【源码】java包装类总结

1.包装类除了Void和Character,其他六个全部都继承自Number。Number是一个抽象类。如下:public abstract class Number implements java.io.Serializable {public abstract int intValue();public abstract long longValue();public abstract float float…

扩展枚举功能的两种方法

前言 在上一篇文章中,我解释了如何以及为什么在Java代码中使用enums而不是switch/case控制结构。 在这里,我将展示如何扩展现有enums功能。 介绍 Java enum是一种编译器魔术。 在字节码中,任何enum都表示为扩展抽象类java.lang.Enum并具有几…

【渝粤教育】国家开放大学2018年春季 7403-21T素质与思想政治教育 参考试题

编码:7403 座位号: 2017-2018学年度第二学期期末考试 素质与思想政治教育试题(开卷) 2018年7月 一、单项选择题(每题3分,共30分) 考生注意:请将答案填写在下面的方框内,…

工业交换机和工业级光纤收发器的区别

工业交换机和工业级光纤收发器都是网络数据传输设备中的重要组成部分。工业交换机是进行网络内数据交换的一种以太网连接设备,而工业级光纤收发器是延长传输距离的一种光电转换设备。那么他们之间具体有哪些不同之处呢?接下来就由飞畅科技的小编来为大家…

【渝粤教育】国家开放大学2018年春季 8635-21T老年人中医体质辨识与养 参考试题

科目编号:8635 座位号 2017-2018学年度第二学期期末考试 老年人中医体质辨识与养生保健试题 2018年6月 一、名词解释(本大题共5小题,每小题4分,共计20分) 1.拔罐 2.炙法 3.气虚体质 4.阳虚体质 5.痰湿体质 二、填…

java.lang.stackoverflowerror_java.lang.StackOverflowError——如何解决StackOverflowError错误

StackOverflowError在程序栈空间耗尽时抛出,通常是深度递归导致。StackOverflowError继承了VirtualMachineError类,后者表示JVM已被破坏或资源耗尽。更进一步,VirtualMachineError继承自Error类,应用程序不应该捕获这种严重的错误…

【渝粤教育】国家开放大学2018年春季 8664-21T文书档案管理 参考试题

试卷编号:8664 座位号 2017——2018学年度第二学期期末考试 文 书 档 案 管 理 试 题 2018年7月 1.从文书的形成和使用上划分,文书可分为 和 两类。 2.文头一般由公文名称(又称版头)、 、 、 、 等部组成…

couchbase_Spring Data Couchbase 1.0 GA发布

couchbaseSpring Data Couchbase 1.0 GA版本已发布! 该项目是Spring Data项目的一部分,该项目旨在为新数据存储提供熟悉且一致的基于Spring的编程模型,同时保留特定于存储的功能。 Spring Data Couchbase项目提供了与Couchbase Server数据库…

工业交换机厂家,工业交换机品牌前十大排名

工业交换机,也叫工业以太网交换机。随着物联网的快速发展,工业交换机市场竞争也越来越激烈。国内的工业交换机厂家,像北京东土、深圳三旺、杭州飞畅科技等都有自己的研发团队,产品质量和进口的几乎没有差别,但是价格比…

【渝粤教育】国家开放大学2018年秋季 0043-22T计算机文化 参考试题

编号:0053 座位号: 2018~2019学年度第一学期期末考试 立体构成 试题 2019年1月 一、实作题(100分) 运用所学知识,完成一件“渐变层面构造”的立体构成作品。 要求:1.所用材料为纸质材料。 2.作…

设计php框架_自制PHP框架之设计模式

为什么要使用设计模式?设计模式,我的理解是为了达到“可复用”这个目标,而设计的一套相互协作的类。感兴趣的读者可以阅读《Design Patterns: Elements of Reusable Object-Oriented Software》,四位作者(Gang of Four)在书中列举…

Java将列表转换为数组,反之亦然

介绍: 在本文中, 我们将快速学习如何将Java List (例如ArrayList )转换为数组,反之亦然。 如果您希望总体上了解有关ArrayList的更多信息,请随时阅读我们有关Java ArrayLists的文章。 同时,让我…

工业交换机选择时需要注意什么?

工业以太网交换机是用于连接以太网的设备,应用十分广泛,主要应用于:煤矿安全、轨道交通、工厂自动化、水处理系统、城市安防等。现如今,市场上的工业交换机品牌厂家有很多,如何选购合适的以太网交换机是件令人困扰的事…

【渝粤教育】国家开放大学2018年秋季 0266-22T设计构成 参考试题

试卷编号:0272 座位号 2018—2019年度第一学期期末考试 创建小企业 试题 一、名词解释(每小题10分,共40分) 1.产品 商业模式 创业计划 市场定位 二、单项选择题(每小题3分,共30分,每小题只…