摘要:對(duì)象實(shí)際上屬于框架的功能類,接口和接口類似,但是提供了比更加強(qiáng)大的功能,主要表現(xiàn)為一下點(diǎn)可以在任務(wù)結(jié)束的時(shí)候提供一個(gè)返回值,無(wú)法提供這個(gè)功能。中的方法可以拋出異常,而不能。
Callable 對(duì)象實(shí)際上屬于Executor框架的功能類,callable接口和runable接口類似,但是提供了比runnable更加強(qiáng)大的功能,主要表現(xiàn)為一下3點(diǎn):
1 callable可以在任務(wù)結(jié)束的時(shí)候提供一個(gè)返回值,runnable無(wú)法提供這個(gè)功能。
2 callable中的call()方法可以拋出異常,而runnable不能。
3 運(yùn)行callable可以拿到一個(gè)future對(duì)象,而future對(duì)象表示異步計(jì)算的結(jié)果,它提供了檢查運(yùn)算是否結(jié)束的方法,由于線程屬于異步計(jì)算模型,所以無(wú)法從其他線程中得到方法的返回值,在這種情況之下,就可以使用future來(lái)監(jiān)視目標(biāo)線程調(diào)用call方法的情況,當(dāng)調(diào)用future的get方法以獲取結(jié)果時(shí),當(dāng)前線程就會(huì)被阻塞,直到call方法結(jié)束返回結(jié)果。
public class MyCallBack {
public static void main ( String[] args ) {
ExecutorService threadPool = Executors.newSingleThreadExecutor(); // 啟動(dòng)線程 FuturestringFuture = threadPool.submit( new Callable< String >( ) { @Override public String call ( ) throws Exception { return "nihao"; } } ); try { System.out.println( stringFuture.get() ); } catch ( InterruptedException e ) { e.printStackTrace( ); } catch ( ExecutionException e ) { e.printStackTrace( ); }
}
}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75155.html
摘要:抽象類表示的是,這個(gè)對(duì)象是什么。下面提供了一個(gè)完整的有返回結(jié)果的多線程測(cè)試?yán)樱谙买?yàn)證過(guò)沒問題可以直接使用。創(chuàng)建固定數(shù)目線程的線程池。創(chuàng)建一個(gè)支持定時(shí)及周期性的任務(wù)執(zhí)行的線程池,多數(shù)情況下可用來(lái)替代類。 接口和抽象類有什么區(qū)別你選擇使用接口和抽象類的依據(jù)是什么? 接口和抽象類的概念不一樣。接口是對(duì)動(dòng)作的抽象,抽象類是對(duì)根源的抽象。抽象類表示的是,這個(gè)對(duì)象是什么。接口表示的是,這個(gè)對(duì)象...
摘要:多線程基礎(chǔ)基本概念進(jìn)程所謂進(jìn)程就是運(yùn)行在操作系統(tǒng)的一個(gè)任務(wù),進(jìn)程是計(jì)算機(jī)任務(wù)調(diào)度的一個(gè)單位,操作系統(tǒng)在啟動(dòng)一個(gè)程序的時(shí)候,會(huì)為其創(chuàng)建一個(gè)進(jìn)程,就是一個(gè)進(jìn)程。代碼就不做過(guò)多解釋了,沒有代碼搞個(gè)毛的多線程。運(yùn)行狀態(tài)拿到的線程開始執(zhí)行。 多線程基礎(chǔ) 基本概念 進(jìn)程 所謂進(jìn)程就是運(yùn)行在操作系統(tǒng)的一個(gè)任務(wù),進(jìn)程是計(jì)算機(jī)任務(wù)調(diào)度的一個(gè)單位,操作系統(tǒng)在啟動(dòng)一個(gè)程序的時(shí)候,會(huì)為其創(chuàng)建一個(gè)進(jìn)程,JVM就...
摘要:一個(gè)進(jìn)程中是可以有多個(gè)線程的,這個(gè)應(yīng)用程序也可以稱之為多線程程序。也就是說(shuō)線程創(chuàng)建并執(zhí)行需要給定線程要執(zhí)行的任務(wù)。接口對(duì)線程對(duì)象和線程任務(wù)進(jìn)行解耦。另外,通過(guò)適當(dāng)?shù)恼{(diào)整線程中的線程數(shù)目可以防止出現(xiàn)資源不足的情況。 01進(jìn)程概念 *A:進(jìn)程概念 *a:進(jìn)程:進(jìn)程指正在運(yùn)行的程序。確切的來(lái)說(shuō),當(dāng)一個(gè)程序進(jìn)入內(nèi)存運(yùn)行, 即變成一個(gè)進(jìn)程,進(jìn)程是處于運(yùn)行過(guò)程中的程序,并且具有一定獨(dú)...
摘要:多線程的實(shí)現(xiàn)用多線程只有一個(gè)目的更好的利用資源燒水的例子當(dāng)洗杯子花分鐘線程要停分鐘等待返回結(jié)果才能進(jìn)行后續(xù)的燒水操作,新開一個(gè)線程執(zhí)行洗杯子操作。指在并發(fā)的情況之下,該代碼經(jīng)過(guò)多線程使用,線程的調(diào)度順序不影響任何結(jié)果。 Java多線程的實(shí)現(xiàn) 用多線程只有一個(gè)目的:更好的利用cpu資源.燒水的例子.(當(dāng)洗杯子花5分鐘,線程要停5分鐘等待返回結(jié)果才能進(jìn)行后續(xù)的燒水操作,新開一個(gè)線程執(zhí)行洗杯...
摘要:前言前段時(shí)間寫過(guò)一篇線程池沒你想的那么簡(jiǎn)單,和大家一起擼了一個(gè)基本的線程池,具備線程池基本調(diào)度功能。線程池自動(dòng)擴(kuò)容縮容。回調(diào)以上就是線程池的構(gòu)造函數(shù)以及接口的定義。所以我們?cè)谑褂镁€程池時(shí),其中的任務(wù)一定要做好異常處理。線程異常捕獲的重要性。 showImg(https://segmentfault.com/img/remote/1460000019403163?w=1904&h=108...
閱讀 2684·2023-04-25 18:10
閱讀 1624·2019-08-30 15:53
閱讀 2826·2019-08-30 13:10
閱讀 3235·2019-08-29 18:40
閱讀 1140·2019-08-23 18:31
閱讀 1213·2019-08-23 16:49
閱讀 3413·2019-08-23 16:07
閱讀 888·2019-08-23 15:27