电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Java并發(fā)教程之Callable和Future接口詳解

瀏覽:130日期:2023-02-07 14:28:40

剛把Thread 的知識(shí)理了一遍。

Runnable是一個(gè)接口,而Thread是Runnable的一個(gè)實(shí)現(xiàn)類。

所以也就有了之前創(chuàng)建線程的兩種方法

繼承Thread 實(shí)現(xiàn)Runnable

我們看一下新建線程的方法:

Java并發(fā)教程之Callable和Future接口詳解

都是得傳入一個(gè)Runnable對象(這句話很關(guān)鍵)

所以傳入一個(gè)Runnble和Thread對象都行。

現(xiàn)在引入創(chuàng)建線程的第三種方法:Callable

為了實(shí)現(xiàn) Runnable,需要實(shí)現(xiàn)不返回任何內(nèi)容的 run()方法,而對于

Callable,需要實(shí)現(xiàn)在完成時(shí)返回結(jié)果的 call()方法。

• call()方法可以引發(fā)異常,而 run()則不能。

Callable最大的特點(diǎn)就是 它能返回?cái)?shù)值,并拋出異常,而且它不是run()方法,而是call()方法。

但是Callable最大的問題就是不能丟人Thread類中直接創(chuàng)建,因?yàn)門hread只認(rèn)識(shí)Runnable,所以我們必須找到Callable和Runnable之間的橋梁。

Java并發(fā)教程之Callable和Future接口詳解

也就是找一個(gè)類,即和Runnable友關(guān)系,又和Callable有關(guān)系。

這個(gè)類就是FutureTask了。

Runnable接口有實(shí)現(xiàn)類FutureTask FutureTask構(gòu)造可以傳遞Callable

所以創(chuàng)建也給Callable可以這樣

新類 MyThread2 實(shí)現(xiàn) callable 接口class MyThread2 implements Callable<Integer>{@Overridepublic Integer call() throws Exception {return 200;}

1、新建一個(gè)callable對象

Callable callable = new MyThread2()

2、傳入callable對象,并新建一個(gè)futuretask對象,

FutureTask futureTask2 = new FutureTask(callable)

也可以之間通過lam表達(dá)式(函數(shù)式接口)實(shí)現(xiàn)

Java并發(fā)教程之Callable和Future接口詳解

3、新建一個(gè)線程,傳入FutureTask對象

new Thread(futureTask2, “線程二”).start()

這就是基本步驟。

接下來可以來擴(kuò)展地講講 futuretask的作用

Future對象

Future 接口

當(dāng) call()方法完成時(shí),結(jié)果必須存儲(chǔ)在主線程已知的對象中,以便主線程可以知道該線程返回的結(jié)果。為此,可以使用 Future 對象。

將 Future 視為保存結(jié)果的對象?它可能暫時(shí)不保存結(jié)果,但將來會(huì)保存(一旦Callable 返回)。Future 基本上是主線程可以跟蹤進(jìn)度以及其他線程的結(jié)果的一種方式。要實(shí)現(xiàn)此接口,必須重寫 5 種方法,這里列出了重要的方法,如下:

• public boolean cancel(boolean mayInterrupt):用于停止任務(wù)。

如果尚未啟動(dòng),它將停止任務(wù)。如果已啟動(dòng),則僅在 mayInterrupt 為 true時(shí)才會(huì)中斷任務(wù)。

• public Object get()拋出 InterruptedException,ExecutionException:

用于獲取任務(wù)的結(jié)果。

如果任務(wù)完成,它將立即返回結(jié)果,否則將等待任務(wù)完成,然后返回結(jié)果。

• public boolean isDone():如果任務(wù)完成,則返回 true,否則返回 false可以看到 Callable 和 Future 做兩件事-Callable 與 Runnable 類似,因?yàn)樗庋b了要在另一個(gè)線程上運(yùn)行的任務(wù),而 Future 用于存儲(chǔ)從另一個(gè)線程獲得的結(jié)果。實(shí)際上,future 也可以與 Runnable 一起使用。

要?jiǎng)?chuàng)建線程,需要 Runnable。為了獲得結(jié)果,需要 future。

FutureTask

Java 庫具有具體的 FutureTask 類型,該類型實(shí)現(xiàn) Runnable 和 Future,并方便地將兩種功能組合在一起。 可以通過為其構(gòu)造函數(shù)提供 Callable 來創(chuàng)建FutureTask。然后,將 FutureTask 對象提供給 Thread 的構(gòu)造函數(shù)以創(chuàng)建Thread 對象。因此,間接地使用 Callable 創(chuàng)建線程。

核心原理:(重點(diǎn))

在主線程中需要執(zhí)行比較耗時(shí)的操作時(shí),但又不想阻塞主線程時(shí),可以把這些作業(yè)交給 Future 對象在后臺(tái)完成

• 當(dāng)主線程將來需要時(shí),就可以通過 Future 對象獲得后臺(tái)作業(yè)的計(jì)算結(jié)果或者執(zhí)行狀態(tài)

• 一般 FutureTask 多用于耗時(shí)的計(jì)算,主線程可以在完成自己的任務(wù)后,再去獲取結(jié)果。

• 僅在計(jì)算完成時(shí)才能檢索結(jié)果;如果計(jì)算尚未完成,則阻塞 get 方法

• 一旦計(jì)算完成,就不能再重新開始或取消計(jì)算

• get 方法而獲取結(jié)果只有在計(jì)算完成時(shí)獲取,否則會(huì)一直阻塞直到任務(wù)轉(zhuǎn)入完成狀態(tài),然后會(huì)返回結(jié)果或者拋出異常

• get 只計(jì)算一次,因此 get 方法放到最后

舉個(gè)例子吧。

比如現(xiàn)在老師在上課,但是他渴了,他想買水,但是還得繼續(xù)上課。

這時(shí)就可以單獨(dú)開啟一條線程,讓班長去幫他買水。(開啟單獨(dú)一條線程,不影響主線程的運(yùn)行)

Java并發(fā)教程之Callable和Future接口詳解

Java并發(fā)教程之Callable和Future接口詳解

get方法可以得到return的值

Java并發(fā)教程之Callable和Future接口詳解

isDone()方法可以判斷是否完成了。

Java并發(fā)教程之Callable和Future接口詳解Java并發(fā)教程之Callable和Future接口詳解

第一次會(huì)計(jì)算,第二次(之前計(jì)算過的),就直接返回結(jié)果了。

總結(jié)

到此這篇關(guān)于Java并發(fā)教程之Callable和Future接口的文章就介紹到這了,更多相關(guān)Java并發(fā)Callable和Future接口內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 耐高温硅酸铝板-硅酸铝棉保温施工|亿欧建设工程 | 宁波普瑞思邻苯二甲酸盐检测仪,ROHS2.0检测设备,ROHS2.0测试仪厂家 | 山东风淋室_201/304不锈钢风淋室净化设备厂家-盛之源风淋室厂家 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 浩方智通 - 防关联浏览器 - 跨境电商浏览器 - 云雀浏览器 | 脉冲除尘器,除尘器厂家-淄博机械| 万烁建筑设计院-建筑设计公司加盟,设计院加盟分公司,市政设计加盟 | IPO咨询公司-IPO上市服务-细分市场研究-龙马咨询| 广州展台特装搭建商|特装展位设计搭建|展会特装搭建|特装展台制作设计|展览特装公司 | 范秘书_懂你的范文小秘书 | 釜溪印象网络 - Powered by Discuz! | 挤塑板-XPS挤塑板-挤塑板设备厂家[襄阳欧格] | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 转子泵_凸轮泵_凸轮转子泵厂家-青岛罗德通用机械设备有限公司 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 电动手术床,医用护理床,led手术无影灯-曲阜明辉医疗设备有限公司 | 博客-悦享汽车品质生活| 回转窑-水泥|石灰|冶金-巩义市瑞光金属制品有限责任公司 | 缓蚀除垢剂_循环水阻垢剂_反渗透锅炉阻垢剂_有机硫化物-郑州威大水处理材料有限公司 | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 | SF6环境监测系统-接地环流在线监测装置-瑟恩实业 | 北京银联移动POS机办理_收银POS机_智能pos机_刷卡机_收银系统_个人POS机-谷骐科技【官网】 | 横河变送器-横河压力变送器-EJA变送器-EJA压力变送器-「泉蕴仪表」 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 环氧树脂地坪漆_济宁市新天地漆业有限公司 | 无刷电机_直流无刷电机_行星减速机-佛山市藤尺机电设备有限公司 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 会议会展活动拍摄_年会庆典演出跟拍_摄影摄像直播-艾木传媒 | 拖鞋定制厂家-品牌拖鞋代加工厂-振扬实业中国高端拖鞋大型制造商 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 一点车讯-汽车网站,每天一点最新车讯! | 万博士范文网-您身边的范文参考网站Vanbs.com | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 天命文免费算命堂_自助算命_自由算命系统_长文周易 | 江苏密集柜_电动_手动_移动_盛隆柜业江苏档案密集柜厂家 | 扬尘监测_扬尘监测系统_带证扬尘监测设备 - 郑州港迪科技有限公司 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 天津电机维修|水泵维修-天津晟佳机电设备有限公司 |