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λ,咱們能夠這麼寫:高併發

相關文章
相關標籤/搜索