欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析Java和Scala中的Future

 更新時間:2017年10月26日 16:36:19   投稿:mrr  
這篇文章主要介紹了Java和Scala中的Future的相關資料,需要的朋友可以參考下

隨著CPU的核數(shù)的增加,異步編程模型在并發(fā)領域中的得到了越來越多的應用,由于Scala是一門函數(shù)式語言,天然的支持異步編程模型,今天主要來看一下Java和Scala中的Futrue,帶你走入異步編程的大門。

Future

很多同學可能會有疑問,F(xiàn)utrue跟異步編程有什么關系?從Future的表面意思是未來,一個Future對象可以看出一個將來得到的結果,這就和異步執(zhí)行的概念很像,你只管自己去執(zhí)行,只要將最終的結果傳達給我就行,線程不必一直暫停等待結果,可以在具體異步任務執(zhí)行的時候去執(zhí)行其他操作,舉個例子:

async work

我們現(xiàn)在在執(zhí)行做飯這么一個任務,它需要煮飯,燒菜,擺置餐具等操作,如果我們通過異步這種概念去執(zhí)行這個任務,比如煮飯可能需要比較久的時間,但煮飯這個過程又不需要我們管理,我們可以利用這段時間去燒菜,燒菜過程中也可能有空閑時間,我們可以去擺置餐具,當電飯鍋通知我們飯燒好了,菜也燒好了,最后我們就可以開始吃飯了,所以說,上面的“煮飯 -> 飯”,“燒菜 -> 菜”都可以看成一個Future的過程。

Java中的Future

在Java的早期版本中,我們不能得到線程的執(zhí)行結果,不管是繼承Thread類還是實現(xiàn)Runnable接口,都無法獲取線程的執(zhí)行結果,所以我們只能在線程執(zhí)行的run方法里去做相應的一些業(yè)務邏輯操作,但隨著Java5的發(fā)布,它為了我們帶來了Callable和Future接口,我們可以利用這兩個接口的特性來獲取線程的執(zhí)行結果。

Callable接口

通俗的講,Callable接口也是一個線程執(zhí)行類接口,那么它跟Runnable接口有什么區(qū)別呢?我們先來看看它們兩個的定義:

1.Callable接口:

@FunctionalInterface
public interface Callable<V> {
 /**
  * Computes a result, or throws an exception if unable to do so.
  *
  * @return computed result
  * @throws Exception if unable to compute a result
  */
 V call() throws Exception;
}

2.Runnable接口:

@FunctionalInterface
public interface Runnable {
 public abstract void run();
}

從上面的定義,我們可以看出,兩者最大的區(qū)別就是對應的執(zhí)行方法是否有返回值。Callable接口中call方法具有返回值,這便是為什么我們可以通過Callable接口來得到一個線程執(zhí)行的返回值或者是異常信息。

Future接口

上面說到既然Callable接口能返回線程執(zhí)行的結果,那么為什么還需要Future接口呢?因為Callable接口執(zhí)行的結果只是一個將來的結果值,我們若是需要得到具體的結果就必須利用Future接口,另外Callable接口需要委托ExecutorService的submit提交任務去執(zhí)行,我們來看看它是如何定義的:

<T> Future<T> submit(Callable<T> task);
 public <T> Future<T> submit(Callable<T> task) {
  if (task == null) throw new NullPointerException();
  RunnableFuture<T> ftask = newTaskFor(task);
  execute(ftask);
  return ftask;
 }

總結

以上所述是小編給大家介紹的Java和Scala中的Future,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • SpringMVC HttpMessageConverter消息轉換器

    SpringMVC HttpMessageConverter消息轉換器

    ??HttpMessageConverter???,報文信息轉換器,將請求報文轉換為Java對象,或將Java對象轉換為響應報文。???HttpMessageConverter???提供了兩個注解和兩個類型:??@RequestBody,@ResponseBody???,??RequestEntity,ResponseEntity??
    2023-04-04
  • Java多線程中的Phaser詳解

    Java多線程中的Phaser詳解

    這篇文章主要介紹了Java多線程中的Phaser詳解,Pahser是一個可以重復使用的同步屏障,Phaser是按照不同階段執(zhí)行線程的,它本身維護著一個叫 phase 的成員變量代表當前執(zhí)行的階段,需要的朋友可以參考下
    2023-11-11
  • java開發(fā)讀取嵌套jar包中的文件

    java開發(fā)讀取嵌套jar包中的文件

    這篇文章主要為大家介紹了java開發(fā)讀取嵌套jar包中的文件方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • java hashtable實現(xiàn)代碼

    java hashtable實現(xiàn)代碼

    這篇文章介紹了java hashtable實現(xiàn)代碼,有需要的朋友可以參考一下
    2013-10-10
  • Springboot+redis+Interceptor+自定義annotation實現(xiàn)接口自動冪等

    Springboot+redis+Interceptor+自定義annotation實現(xiàn)接口自動冪等

    本篇文章給大家介紹了使用springboot和攔截器、redis來優(yōu)雅的實現(xiàn)接口冪等,對于冪等在實際的開發(fā)過程中是十分重要的,因為一個接口可能會被無數(shù)的客戶端調用,如何保證其不影響后臺的業(yè)務處理,如何保證其只影響數(shù)據(jù)一次是非常重要的,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • 在Mybatis中使用自定義緩存ehcache的方法

    在Mybatis中使用自定義緩存ehcache的方法

    這篇文章主要介紹了在Mybatis中使用自定義緩存ehcache的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • SpringBoot異步處理的四種實現(xiàn)方式

    SpringBoot異步處理的四種實現(xiàn)方式

    本篇文章我們以SpringBoot中異步的使用(包括:異步調用和異步方法兩個維度)來進行講解,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Spring Session實現(xiàn)分布式session的簡單示例

    Spring Session實現(xiàn)分布式session的簡單示例

    本篇文章主要介紹了Spring Session實現(xiàn)分布式session的簡單示例,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • java基礎之Integer與int類型輸出示例解析

    java基礎之Integer與int類型輸出示例解析

    這篇文章主要為大家介紹了java基礎之Integer與int類型輸出示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • java中類與對象的使用詳情

    java中類與對象的使用詳情

    這篇文章主要介紹了java中類與對象的使用詳情,面向對象是通過類和對象去描述和代表萬千事物對象的,首先我們需要知道如何去定義一個類,下面文章我們詳細介紹兩者的使用方法,需要的小伙伴可以參考一下
    2022-05-05

最新評論