一、繼承Thread類創(chuàng)建線程類
(1)定義Thread類的子類,并重寫該類的run方法,該run方法的方法體就代 表了線程要完成的任務。因此把run()方法稱為執(zhí)行體。
(2)創(chuàng)建Thread子類的實例,即創(chuàng)建了線程對象。
(3)調(diào)用線程對象的start()方法來啟動該線程。
二、通過Runnable接口創(chuàng)建線程類
(1)定義runnable接口的實現(xiàn)類,并重寫該接口的run()方法,該run()方法的方法體是該線程的線程執(zhí)行體。
(2)創(chuàng)建 Runnable實現(xiàn)類的實例,并依此實例作為Thread的target來創(chuàng)建Thread對象,該Thread對象才是真正的線程對象。
(3)調(diào)用線程對象的start()方法來啟動該線程。
三、通過Callable和Future創(chuàng)建線程
(1)創(chuàng)建Callable接口的實現(xiàn)類,并實現(xiàn)call()方法,該call()方法將作為線程執(zhí)行體,并且有返回值。
(2)創(chuàng)建Callable實現(xiàn)類的實例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值。
(3)使用FutureTask對象作為Thread對象的target創(chuàng)建并啟動新線程。
(4)調(diào)用FutureTask對象的get()方法來獲得子線程執(zhí)行結(jié)束后的返回值,調(diào)用get()方法會阻塞線程。
創(chuàng)建線程的三種方式的對比:
繼承Thread類的方式創(chuàng)建多線程
優(yōu)勢:編寫簡單,如果需要訪問當前線程,則無需使用Thread.currentThread()方法,直接使用this即可獲得當前線程。
劣勢是:線程類已經(jīng)繼承了Thread類,所以不能再繼承其他父類。
實現(xiàn)Runnable、Callable接口的方式創(chuàng)見多線程
優(yōu)勢是:線程類只是實現(xiàn)了Runnable接口或Callable接口,還可以繼承其他類。在這種方式下,多個線程可以共享同一個target對象,適合多個相同線程來處理同一份資源的情況。
劣勢是:編程稍微復雜,如果要訪問當前線程,則必須使用Thread.currentThread()方法。
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構(gòu)成任何投資及應用建議。本站是一個個人學習交流的平臺,網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關內(nèi)容。本站擁有對此聲明的最終解釋權(quán)。