日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Callable、Future、FutureTask浅析

發(fā)布時(shí)間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Callable、Future、FutureTask浅析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、Callable<V>接口

Runnable接口

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

Callable

public interface Callable<V> { V call() throws Exception; }

runnable接口 Callable接口 都可以被ThreadPoolExecutor或ScheduledThreadPoolExecutor執(zhí)行,兩者實(shí)現(xiàn)了ExcutorService接口

ExecutorService接口

<T> Future<T> submit(Callable<T> task); <T> Future<T> submit(Runnable task, T result); Future<?> submit(Runnable task);

2、Future<V>?

獲得異步計(jì)算結(jié)果,說白了就是對(duì)具體的Runnable或者Callable對(duì)象任務(wù)執(zhí)行的結(jié)果進(jìn)行獲取(get()),取消(cancel()),判斷是否完成等操作。

public interface Future<V> {
  //如果任務(wù)沒開始,cancle()將會(huì)返回true
  //如果任務(wù)已經(jīng)啟動(dòng),執(zhí)行cancle(true)將以中斷執(zhí)行此任務(wù)線程的方式來試圖阻止任務(wù),成功返滬true
//如果任務(wù)已經(jīng)啟動(dòng),執(zhí)行cancle(false)將不會(huì)對(duì)執(zhí)行線程產(chǎn)生影響,此時(shí)返回false
boolean cancel(boolean mayInterruptIfRunning);
  //如果任務(wù)完成前被取消,返回true
boolean isCancelled();
  //如果任務(wù)結(jié)束,無論是正常結(jié)束或是中途取消還是發(fā)生異常,都會(huì)true
boolean isDone();
  //獲取異步執(zhí)行結(jié)果,如果沒有結(jié)果可用,此方法會(huì)阻塞直到異步計(jì)算完成。V get()
throws InterruptedException, ExecutionException;
  //獲取異步執(zhí)行結(jié)果,如果沒有結(jié)果可用,此方法會(huì)阻塞,
//但是會(huì)有時(shí)間限制,如果阻塞時(shí)間超過設(shè)定的timeout時(shí)間,該方法將拋出異常。V get(
long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException; }

3、FutureTask類

public class FutureTask<V> implements RunnableFuture<V> {

其中

public interface RunnableFuture<V> extends Runnable, Future<V> { void run(); }

構(gòu)造方法:

public interface RunnableFuture<V> extends Runnable, Future<V> { void run(); }

使用場景:

1、使用Callable+Future獲取執(zhí)行結(jié)果

package com.zejian.Executor; import java.util.concurrent.Callable; /** * @author zejian * @time 2016年3月15日 下午2:02:42 * @decrition Callable接口實(shí)例 */ public class CallableDemo implements Callable<Integer> { private int sum; @Override public Integer call() throws Exception { System.out.println("Callable子線程開始計(jì)算啦!"); Thread.sleep(2000); for(int i=0 ;i<5000;i++){ sum=sum+i; } System.out.println("Callable子線程計(jì)算結(jié)束!"); return sum; } } package com.zejian.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * @author zejian * @time 2016年3月15日 下午2:05:43 * @decrition callable執(zhí)行測試類 */ public class CallableTest { public static void main(String[] args) { //創(chuàng)建線程池 ExecutorService es = Executors.newSingleThreadExecutor(); //創(chuàng)建Callable對(duì)象任務(wù) CallableDemo calTask=new CallableDemo(); //提交任務(wù)并獲取執(zhí)行結(jié)果 Future<Integer> future =es.submit(calTask); //關(guān)閉線程池 es.shutdown(); try { Thread.sleep(2000); System.out.println("主線程在執(zhí)行其他任務(wù)"); if(future.get()!=null){ //輸出獲取到的結(jié)果 System.out.println("future.get()-->"+future.get()); }else{ //輸出獲取到的結(jié)果 System.out.println("future.get()未獲取到結(jié)果"); } } catch (Exception e) { e.printStackTrace(); } System.out.println("主線程在執(zhí)行完成"); } }

執(zhí)行結(jié)果:

Callable子線程開始計(jì)算啦! 主線程在執(zhí)行其他任務(wù) Callable子線程計(jì)算結(jié)束! future.get()-->12497500 主線程在在執(zhí)行完成

2、使用Callable+FutureTask獲取執(zhí)行結(jié)果

package com.zejian.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; /** * @author zejian * @time 2016年3月15日 下午2:05:43 * @decrition callable執(zhí)行測試類 */ public class CallableTest { public static void main(String[] args) { //創(chuàng)建線程池 ExecutorService es = Executors.newSingleThreadExecutor(); //創(chuàng)建Callable對(duì)象任務(wù) CallableDemo calTask=new CallableDemo(); //創(chuàng)建FutureTask FutureTask<Integer> futureTask=new FutureTask<>(calTask); //執(zhí)行任務(wù) es.submit(futureTask); //關(guān)閉線程池 es.shutdown(); try { Thread.sleep(2000); System.out.println("主線程在執(zhí)行其他任務(wù)"); if(futureTask.get()!=null){ //輸出獲取到的結(jié)果 System.out.println("futureTask.get()-->"+futureTask.get()); }else{ //輸出獲取到的結(jié)果 System.out.println("futureTask.get()未獲取到結(jié)果"); } } catch (Exception e) { e.printStackTrace(); } System.out.println("主線程在執(zhí)行完成"); } }

結(jié)果:

Callable子線程開始計(jì)算啦! 主線程在執(zhí)行其他任務(wù) Callable子線程計(jì)算結(jié)束! futureTask.get()-->12497500 主線程在執(zhí)行完成

?

轉(zhuǎn)載于:https://www.cnblogs.com/L-a-u-r-a/p/8570080.html

總結(jié)

以上是生活随笔為你收集整理的Callable、Future、FutureTask浅析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本人妖在线 | 成人欧美一区二区三区黑人冫 | av作品在线观看 | 中国黄色免费 | 亚洲精品中文字幕乱码无线 | av免费网页 | 巨乳美女被爆操 | 老司机免费在线视频 | 成人精品视频网站 | 亚洲av无一区二区三区久久 | 欧美三级韩国三级日本三斤在线观看 | 自拍偷拍综合 | 潘金莲一级淫片免费放动漫 | 欧美黄色片 | 五月天综合激情网 | 俄罗斯精品一区二区三区 | 肉色超薄丝袜脚交一区二区 | 黄色网址网站 | 72种无遮挡啪啪的姿势 | 亚洲色偷精品一区二区三区 | 色免费看| 国产网站精品 | 特黄特色特刺激免费播放 | 国产美女免费 | 成人一区二区三区视频 | 国产乱子伦精品无码专区 | 中文字幕av免费观看 | 深爱激情久久 | 日韩系列在线 | 欧美精品在线一区 | 国产一区二区三区久久 | 深夜成人福利视频 | 日日爽夜夜 | 永久免费在线视频 | 一区二区三区视频在线播放 | 黄色尤物视频 | 亚日韩欧美 | 激情丁香婷婷 | 日本色综合| 天堂中文字幕免费一区 | 午夜av激情| 91小宝寻花一区二区三区 | 麻豆精品国产传媒av绿帽社 | 草草国产 | 蜜桃精品一区二区 | 欲涩漫入口免费网站 | 欧美丝袜一区二区三区 | 日本少妇xxxx动漫 | 亚洲一级在线观看 | 青青草在线播放 | 色综合免费视频 | 天天操狠狠干 | 日韩精品二区在线观看 | 天堂社区av | 国产精品美女在线观看 | 一区二区视频免费在线观看 | 亚洲一区网站 | 少妇特黄a一区二区三区 | 国产一区二区视频网站 | 欧美乱三级 | 丰满人妻一区二区三区53视频 | 久久噜噜噜精品国产亚洲综合 | gai免费观看网站外网 | 麻豆视| 日韩理论在线 | 在线播放亚洲精品 | 欧美日韩高清一区二区 国产亚洲免费看 | 99国产精品久久久久久久 | 亚洲av日韩av永久无码下载 | 国产成人精品一区二区三区免费 | 极品五月天 | 凹凸日日摸日日碰夜夜 | 精品久操 | 国产二区自拍 | 黄色网址进入 | xx性欧美肥妇精品久久久久久 | 日韩电影网址 | 久草免费网站 | 五月婷在线视频 | 狠狠人妻久久久久久综合蜜桃 | 古装三级吃奶做爰 | 亚洲第一自拍 | 欧美日韩在线精品 | 黄色大全免费看 | 古代玷污糟蹋np高辣h文 | 国产一区二区四区 | 国产一区二区黄 | 久久性爱视频网站 | 国产v在线| 美女视频一区二区三区 | 看黄色的网站 | 国产青青 | 玖玖伊人| 亚洲黄色片| 欧美sm凌虐视频网站 | 日本综合久久 | 真人毛片视频 | 亚洲第一区在线 | 在线观看香蕉视频 |