在j**a平台中建立執行緒就是建立乙個thread類或者其子類的例項。每個執行緒的任務處理邏輯都在run()方法中實現,它在j**a虛擬機器中由相應的執行緒直接呼叫。
執行乙個執行緒就是讓j**a虛擬機器執行該執行緒的run()方法。
啟動執行緒需要呼叫thread類的strat()方法。
下面**實現建立執行緒.
public static void main(string args) }
class mythread extends thread }}
publicclass
public
static
void
main(string args)
}
class
mythread2 implements runnable
}
a. 建立callable介面的實現類,並實現call()方法;
b. 建立callable實現類的例項,使用futuretask類來包裝callable物件,該futuretask物件封裝了該callback物件的call()方法的返回值;
c. 使用futuretask物件作為thread物件的target建立並啟動新執行緒;
d. 呼叫futuretask物件的get()方法來獲得子執行緒執行結束後的返回值。
publicclass callablethreadtest implements callable
} try
catch
(interruptedexception e)
catch
(executionexception e)
} @override
public
integer call() throws exception
return
i;
} }
不管是哪種方式,當該執行緒的run方法執行時,執行緒就結束,所佔的資源會被垃圾**器**。我們不能通過start方法再一次呼叫,否則會丟擲illegalthreadexcepton異常.
乙個執行緒就是乙個物件,建立時會為其分配記憶體空間,j**a平台的執行緒還會為其建立乙個核心執行緒,相對來說成本較高。
第二種和第三種基本很類似,只是實現callable可以有返回值。
從物件導向程式設計角度:第一種是一種基於繼承(inheritance)的技術。第二,三種是一種基於(composition)的技術,由於組合相對繼承來說,類與類之間的耦合程度較低,更靈活.
從物件共享的角度:第二種方式可能導致多個執行緒例項共享乙個runable例項,可能涉及一些執行緒安全方面的因素.
從物件建立成本 : 建立乙個執行緒例項比建立乙個runable例項成本相對來說高.
建立多執行緒的三種方式
首先需要理解清楚程式 程序 執行緒 程式 即靜態的 塊 程序 執行中的程序 執行緒 程序的進一部細分,程式的一條執行路徑 第一種 建立乙個類繼承thread,並重寫run 方法 第一種方法 建立乙個繼承thread的子類 class subthread extends thread public c...
執行緒 三種方式 建立執行緒
第一種 1 模擬龜兔賽跑 繼承thread 重寫run 執行緒體 2 使用執行緒 建立子類物件 物件.strat 執行緒啟動 author administrator public class rabbits extends thread class tortoise extends thread ...
JAVA多執行緒(一) 建立執行緒的三種方式
程式 program,是乙個靜態概念 指令集 程序 process,是乙個動態概念 由作業系統排程程式 執行緒 thread,是程序中乙個 單一的連續控制流程 在程序內多條執行路徑 是乙個輕量級的執行緒 一 繼承至thread,重寫run 方法 使用執行緒 1.建立子類物件 2.呼叫start 方法...