Callable,Runnable比較及用法

2021-06-18 09:21:06 字數 2131 閱讀 8108

編寫多執行緒程式是為了實現多工的併發執行,從而能夠更好地與使用者互動。一般有三種方法,thread,runnable,callable.

runnable和callable的區別是,

(1)callable規定的方法是call(),runnable規定的方法是run().

(2)callable的任務執行後可返回值,而runnable的任務是不能返回值得

(3)call方法可以丟擲異常,run方法不可以

(4)執行callable任務可以拿到乙個future物件,表示非同步計算的結果。它提供了檢查計算是否完成的方法,以等待計算的完成,並檢索計算的結果。通過future物件可以了解任務執**況,可取消任務的執行,還可獲取執行結果。

1、通過實現runnable介面來建立thread執行緒:

步驟1:建立實現runnable介面的類:

class somerunnable implements runnable

}步驟2:建立乙個類物件:

runnable onerunnable = new somerunnable();

步驟3:由runnable建立乙個thread物件:

thread onethread = new thread(onerunnable);

步驟4:啟動執行緒:

onethread.start();

至此,乙個執行緒就建立完成了。

注釋:執行緒的執行流程很簡單,當執行**onethread.start();時,就會執行onerunnable物件中的void run();方法,

該方法執行完成後,執行緒就消亡了。

2、與方法1類似,通過實現callable介面來建立thread執行緒:其中,callable介面(也只有乙個方法)定義如下:

public inte***ce callable

步驟1:建立實現callable介面的類somecallable(略);

步驟2:建立乙個類物件:

callableonecallable = new somecallable();

步驟3:由callable建立乙個futuretask物件:

futuretaskonetask = new futuretask(onecallable);

注釋:futuretask是乙個包裝器,它通過接受callable來建立,它同時實現了future和runnable介面。

步驟4:由futuretask建立乙個thread物件:

thread onethread = new thread(onetask);

步驟5:啟動執行緒:

onethread.start();

至此,乙個執行緒就建立完成了。

3、通過繼承thread類來建立乙個執行緒:

步驟1:定義乙個繼承thread類的子類:

class somethead extends thraad

}步驟2:構造子類的乙個物件:

somethread onethread = new somethread();

步驟3:啟動執行緒:

onethread.start();

至此,乙個執行緒就建立完成了。

注釋:這種建立執行緒的方法不夠好,主要是因為其涉及執行機制問題,影響程式效能。

4、通過執行緒池來建立執行緒:

步驟1:建立執行緒池:

executorservice pool = executors.newcachedthreadpool();

步驟2:通過runnable物件或callable物件將任務提交給executorservice物件:

futuresubmit(callabletask);

注釋:future是乙個介面,它的定義如下:

public inte***ce future

至此,乙個執行緒就建立完成了。

注釋:執行緒池需呼叫shutdown();方法來關閉執行緒。

5、通過事件分配執行緒直接使用程式中的原有執行緒:

使用方法:

直接呼叫eventqueue類的靜態方法invokelater():

eventqueue.invokelater(onerunnable);

注釋:呼叫eventqueue.invokelater(onerunnable);會直接執行onerunnable物件中的run()方法

原文:

Callable,Runnable比較及用法

編寫多執行緒程式是為了實現多工的併發執行,從而能夠更好地與使用者互動。一般有三種方法,thread,runnable,callable.runnable和callable的區別是,1 callable規定的方法是call runnable規定的方法是run 2 callable的任務執行後可返回值,...

Callable,Runnable比較及用法

mailauthenticator authenticator new mailauthenticator emailentity.getfrom mailutil mailutil new mailutil emailentity,authenticator executorservice exe...

Callable,Runnable比較及用法

原文 編寫多執行緒程式是為了實現多工的併發執行,從而能夠更好地與使用者互動。一般有三種方法,thread,runnable,callable.runnable和callable的區別是,1 callable規定的方法是call runnable規定的方法是run 2 callable的任務執行後可返...