真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Future怎么在Java與Scala中使用

Future怎么在Java與Scala中使用?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

目前創(chuàng)新互聯(lián)公司已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站改版維護、企業(yè)網(wǎng)站設(shè)計、尼瑪網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

Future

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

Future怎么在Java與Scala中使用

async work

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

Java中的Future

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

Callable接口

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

1.Callable接口:

@FunctionalInterface
public interface Callable {
 /**
  * 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ū)別就是對應(yīng)的執(zhí)行方法是否有返回值。Callable接口中call方法具有返回值,這便是為什么我們可以通過Callable接口來得到一個線程執(zhí)行的返回值或者是異常信息。

Future接口

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

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

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


文章標(biāo)題:Future怎么在Java與Scala中使用
分享URL:http://weahome.cn/article/ppgdie.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部