您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“什么是多線(xiàn)程FutureTask”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“什么是多線(xiàn)程FutureTask”吧!
筆者今天學(xué)習(xí)FutureTask包裝器,簡(jiǎn)單點(diǎn)講該包裝器就是對(duì)底層線(xiàn)程任務(wù)執(zhí)行的包裝,包括返回值,異常拋出等。比如說(shuō)我們現(xiàn)在有個(gè)任務(wù)需要交個(gè)run方法進(jìn)行執(zhí)行,這時(shí)候我們調(diào)用Thread的start方法,然后JVM開(kāi)啟一個(gè)線(xiàn)程幫我們執(zhí)行該方法,但是run返回值為void,并且不能拋出異常,這是就需要包裝器對(duì)其進(jìn)行包裝。今天筆者就來(lái)自己實(shí)現(xiàn)下FutureTask簡(jiǎn)單的底層實(shí)現(xiàn)原理。
首先創(chuàng)建MyCallable接口,添加未實(shí)現(xiàn)的myCall的方法該方法返回T類(lèi)型的返回值,后面交給自定義MyFutureTask任務(wù)包裝器執(zhí)行。
編寫(xiě)MyFutureTask類(lèi)實(shí)現(xiàn)Runnable接口,為什么實(shí)現(xiàn)這個(gè)接口呢,因?yàn)槲覀冃枰獙yCall接口交給JVM底層的線(xiàn)程去執(zhí)行。通常Thread的構(gòu)造函數(shù)會(huì)傳入Runnable接口進(jìn)去。然后調(diào)用Runnable的run方法。等會(huì)我們也需要開(kāi)啟一個(gè)線(xiàn)程傳入MyFutureTask對(duì)象進(jìn)行。讓底層開(kāi)啟一個(gè)線(xiàn)程幫我們執(zhí)行MyFutureTask的fun方法。
MyFutureTask的重寫(xiě)Runnable的run方法,調(diào)用myCallable的myCall的方法執(zhí)行任務(wù),并獲取返回結(jié)果。這里JVM底層會(huì)開(kāi)啟一個(gè)線(xiàn)程幫我們執(zhí)行run方法。
接著在run方法中如果線(xiàn)程任務(wù)執(zhí)行完后,這修改其狀態(tài)為COMPLETE,并喚醒等待的線(xiàn)程。這里涉及到了線(xiàn)程的通訊,我只簡(jiǎn)單的提一下,后續(xù)會(huì)有專(zhuān)題進(jìn)行記錄。
到此,相信大家對(duì)“什么是多線(xiàn)程FutureTask”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。