編寫多執行緒程式是為了實現多工的併發執行,從而能夠更好地與使用者互動。一般有三種方法,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介面(也只有乙個方法)定義如下:
1.建立callable的實現類,並重寫call()方法,該方法為執行緒執行體,並且該方法有返回值
2.建立callable的例項,並用futuertask類來包裝callable物件,該futuertask封裝了callable物件call()方法的返回值
3.例項化futuertask類,引數為futuertask介面實現類的物件來啟動執行緒
4.通過futuertask類的物件的get()方法來獲取執行緒結束後的返回值
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();
至此,乙個執行緒就建立完成了。
注釋:這種建立執行緒的方法不夠好,主要是因為其涉及執行機制問題,影響程式效能。
**:
常用的三種多執行緒實現及啟動方式
繼承thread類的方式,由於以及繼承了父類thread,無法再繼承其他的類。實現runnable介面的方式,可以繼承類以及實現其他的介面,但缺點是無法有返回值。實現callable介面的方式,可以通過指定介面的泛型以及覆寫call介面,實現有返回值的執行緒任務。class mythread ext...
多執行緒常見的三種實現方式
注意 這只說明最常見的三種實現方式,並不說明執行緒池.public class threadtest class mythread extends thread 為什麼要重寫run 方法?因為run方法是用來封裝被執行緒執行的 run 方法和start 方法的區別 run 封裝執行緒執行的 直接呼叫...
java多執行緒三種方式
有三種 1 繼承thread類,重寫run函式 建立 class xx extends thread 開啟執行緒 物件.start 啟動執行緒,run函式執行 2 實現runnable介面,重寫run函式 開啟執行緒 thread t new thread 物件 建立執行緒物件 t.start 3 ...