最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析Java和Scala中的Future

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

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

Future

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

async work

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

Java中的Future

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

Callable接口

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

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ū)別就是對(duì)應(yīng)的執(zhí)行方法是否有返回值。Callable接口中call方法具有返回值,這便是為什么我們可以通過(guò)Callable接口來(lái)得到一個(gè)線程執(zhí)行的返回值或者是異常信息。

Future接口

上面說(shuō)到既然Callable接口能返回線程執(zhí)行的結(jié)果,那么為什么還需要Future接口呢?因?yàn)镃allable接口執(zhí)行的結(jié)果只是一個(gè)將來(lái)的結(jié)果值,我們?nèi)羰切枰玫骄唧w的結(jié)果就必須利用Future接口,另外Callable接口需要委托ExecutorService的submit提交任務(wù)去執(zhí)行,我們來(lái)看看它是如何定義的:

<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;
 }

總結(jié)

以上所述是小編給大家介紹的Java和Scala中的Future,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Springboot如何根據(jù)實(shí)體類生成數(shù)據(jù)庫(kù)表

    Springboot如何根據(jù)實(shí)體類生成數(shù)據(jù)庫(kù)表

    這篇文章主要介紹了Springboot如何根據(jù)實(shí)體類生成數(shù)據(jù)庫(kù)表的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java正則表達(dá)式處理花括號(hào)內(nèi)容替換賦值問(wèn)題

    java正則表達(dá)式處理花括號(hào)內(nèi)容替換賦值問(wèn)題

    這篇文章主要介紹了java正則表達(dá)式處理花括號(hào)內(nèi)容替換賦值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 使用Enumeration和Iterator遍歷集合類詳解

    使用Enumeration和Iterator遍歷集合類詳解

    Enumeration和Iterator接口功能相似,而且Iterator的功能還比Enumeration多,那么為什么還要使用Enumeration
    2013-09-09
  • 通過(guò)JDBC連接oracle數(shù)據(jù)庫(kù)的十大技巧

    通過(guò)JDBC連接oracle數(shù)據(jù)庫(kù)的十大技巧

    通過(guò)JDBC連接oracle數(shù)據(jù)庫(kù)的十大技巧...
    2006-12-12
  • 最新評(píng)論

    濉溪县| 土默特右旗| 江津市| 永德县| 西畴县| 和平区| 宜兰市| 大英县| 敦煌市| 赤壁市| 精河县| 西吉县| 凤城市| 望奎县| 英德市| 巴彦淖尔市| 宝兴县| 霍林郭勒市| 辽中县| 涿鹿县| 榆社县| 和政县| 康保县| 枣庄市| 吉安市| 淄博市| 南投市| 县级市| 松江区| 绍兴市| 平南县| 常德市| 和硕县| 资溪县| 成武县| 延寿县| 宜宾县| 全椒县| 昌宁县| 白山市| 密云县|