在 Java 中,實(shí)現(xiàn)和使用多線程主要有三種常見方式:繼承 Thread 類、實(shí)現(xiàn) Runnable 接口、實(shí)現(xiàn) Callable 接口(配合 Future)。以下是具體實(shí)現(xiàn)方法和使用示例:
一、繼承 Thread 類
通過繼承Thread類并重寫run()方法定義線程任務(wù),調(diào)用start()方法啟動線程(而非直接調(diào)用run())。
特點(diǎn):
簡單直接,但 Java 單繼承限制,無法再繼承其他類。
二、實(shí)現(xiàn) Runnable 接口
實(shí)現(xiàn)Runnable接口的run()方法,將實(shí)例傳入Thread構(gòu)造器啟動線程(推薦,避免單繼承限制)。
特點(diǎn):
可多實(shí)現(xiàn),適合多個(gè)線程共享一個(gè)任務(wù)實(shí)例(如共享資源)。
三、實(shí)現(xiàn) Callable 接口(帶返回值)
Callable接口類似Runnable,但call()方法可返回結(jié)果并拋出異常,需配合Future獲取結(jié)果。
特點(diǎn):
支持返回結(jié)果和異常處理,適合需要線程執(zhí)行結(jié)果的場景。
四、線程池(推薦的線程管理方式)
頻繁創(chuàng)建銷毀線程效率低,實(shí)際開發(fā)中常用線程池管理線程(通過ExecutorService)。
常用線程池:
newFixedThreadPool(n):固定大小線程池
newCachedThreadPool():可緩存線程池(自動擴(kuò)縮容)
newSingleThreadExecutor():單線程池(任務(wù)串行執(zhí)
核心方法與注意事項(xiàng)
- 啟動線程:必須調(diào)用start()(底層會調(diào)用run()并創(chuàng)建新線程),直接調(diào)用run()會在當(dāng)前線程執(zhí)行,不啟動新線程。
- 線程狀態(tài):新建(New)→ 就緒(Runnable)→ 運(yùn)行(Running)→ 阻塞(Blocked/Waiting/Timed Waiting)→ 終止(Terminated)。
- 常用方法:
- Thread.sleep(long ms):當(dāng)前線程休眠(不釋放鎖)。
- Thread.yield():禮讓線程(讓當(dāng)前線程進(jìn)入就緒狀態(tài),重新競爭 CPU)。
- join():等待該線程執(zhí)行完畢后再繼續(xù)當(dāng)前線程。
- setPriority(int):設(shè)置優(yōu)先級(1-10,默認(rèn) 5,高優(yōu)先級概率高,非絕對)。
- 線程安全:多線程共享資源時(shí)需加鎖(synchronized或Lock),避免數(shù)據(jù)不一致。
通過以上方式,可實(shí)現(xiàn) Java 多線程的創(chuàng)建、啟動和管理,根據(jù)場景選擇合適的方式(推薦Runnable+ 線程池)。





暫無評論,快來評論吧!