Java8中的简易并发

Wesley13
• 阅读 1073

我们在《实战Java高并发程序设计》一书中,专门介绍过java 8中对并发的改进。这里我通过转载一篇博客来说简单介绍下。

有人曾经说过(很抱歉,我们找不到原句了):

初级程序员认为并发很难。
中级程序员认为并发很简单。
高级程序员认为并发很难。

这说的很对。但是从好的方面来看,Java8为我们带来了转机,通过lambda表达式和改进的API可以使得编写并发代码更容易。让我们来具体的看看Java8的改进吧:

Java8对JDK 1.0 API的改进

java.lang.Thread早在JDK 1.0版本中就已经存在。在java8中被注解为功能性接口java.lang.Runnable也是。

从现在起,几乎不需要动大脑我们就可以提交Runnables给一个线程。让我们假设我们有一个很耗时的操作:

publicstaticint longOperation() {
    System.out.println("Running
 on thread #"
    +
 Thread.currentThread().getId());
 
    //
 [...]
    return42;
}

我们可以用多种方法把这个操作传递给线程,例如:

Thread[]
 threads = {

  

    //
 Pass a lambda to a thread

    newThread(()
 -> {

    longOperation();

    }),

  

    //
 Pass a method reference to a thread

    newThread(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包中新增的功能性接口都不会抛出被检查异常,把这项工作留给了调用端。

在上一篇博文中,我们已经因此而发布了jOOλ(also jOOL,jOO-Lambda)包,该包包装了JDK中的每一个功能性接口,具有相同功能而且也允许抛出被检异常。这在使用老的JDK API时特别有用,例如JDBC,或者上面提到的Thread API。使用jOOλ,我们可以这么写:

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
3年前
Java8中的简易并发
Java8中的简易并发 分享到:5本文由ImportNewkingviker翻译自jaxenter。欢迎加入Java小组。转载请参见文章末尾的要求。有人曾经说过(很抱歉,我们找不到原句了):初级程序员认为并发很难。中级程序员认为并发很简单。高级程序员认为并发很难。这说的很对。但是从好的方面来看
Wesley13 Wesley13
3年前
35岁,真的是程序员的一道坎吗?
“程序员35岁是道坎”,“程序员35岁被裁”……这些话咱们可能都听腻了,但每当触及还是会感到丝丝焦虑,毕竟每个人都会到35岁。而国内互联网环境确实对35岁以上的程序员不太友好:薪资要得高,却不如年轻人加班猛;虽说经验丰富,但大部分公司并不需要太资深的程序员。但35岁危机并不是不可避免的,比如你可以不断精进技术,将来做技术管理或者
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
Java 8 的 JVM 有多快?Fork
Java8已经发布一段时间了,许多开发者已经开始使用Java8。本文也将讨论最新发布在JDK中的并发功能更新。事实上,JDK中已经有多处java.util.concurrent改动,但本文重点将是ForkJoin框架的改进。我们将讨论一点ForkJoin,然后实现一个简单的基准测试以比较FJ在Java7和Java
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
可莉 可莉
3年前
2021 程序员修炼内功必备:阿里新产 Java 并发编程原理笔记(全彩版)限时开源!
写在前面:近年来在大厂的面试中,高并发不但占比较多,而且已经不局限于并发工具的使用,更多的会深入到底的层实现原理,这样能考察候程序员的内功,看其是否能知其所以然。关于市面上关于Java并发编程的资料感觉有些知识点不是很清晰,于是展开了对Java并发编程原理的讨论。在这收集整理了这些Java并发编程原理整理成书籍,分享给大家。目录
Stella981 Stella981
3年前
2021 程序员修炼内功必备:阿里新产 Java 并发编程原理笔记(全彩版)限时开源!
写在前面:近年来在大厂的面试中,高并发不但占比较多,而且已经不局限于并发工具的使用,更多的会深入到底的层实现原理,这样能考察候程序员的内功,看其是否能知其所以然。关于市面上关于Java并发编程的资料感觉有些知识点不是很清晰,于是展开了对Java并发编程原理的讨论。在这收集整理了这些Java并发编程原理整理成书籍,分享给大家。目录