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





暫無評(píng)論,快來評(píng)論吧!