Java8中的简易并发

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


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

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

这说的很对。可是从好的方面来看,Java8为咱们带来了起色,经过lambda表达式和改进的API能够使得编写并发代码更容易。让咱们来具体的看看Java8的改进吧:程序员

Java8对JDK 1.0 API的改进

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

从如今起,几乎不须要动大脑咱们就能够提交Runnables给一个线程。让咱们假设咱们有一个很耗时的操做:sql

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

咱们能够用多种方法把这个操做传递给线程,例如:api

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λ,咱们能够这么写:高并发

相关文章
相关标签/搜索