8 多線程

概念

進程:具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位。

線程:是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。

關(guān)系:1.相對進程而言,線程是一個更加接近于執(zhí)行體的概念,是進程的一部分;

? ? ? ? ? ?2.線程可以與同進程中的其他線程共享數(shù)據(jù),但擁有自己的棧空間,擁有獨立的執(zhí)行序列;

? ? ? ? ? ?3.一個程序至少有一個進程,一個進程至少有一個線程;

多線程:包含多個能并發(fā)運行的線程,能充分利用CPU。


線程的生命周期

線程是一個動態(tài)執(zhí)行的過程,它也有一個從產(chǎn)生到死亡的過程。

生命周期

新建狀態(tài):創(chuàng)建線程對象后(new Thread或其子類),該線程處于新建狀態(tài),直到start();

就緒狀態(tài):線程對象調(diào)用start()方法后,該線程進入就緒狀態(tài),處于就緒隊列中,等待JVM線程調(diào)度器調(diào)度;

運行狀態(tài):就緒狀態(tài)線程獲取到CPU資源,執(zhí)行run()方法,該線程處于運行狀態(tài),此時可變?yōu)樽枞⒕途w、或死亡狀態(tài);

阻塞狀態(tài):如果線程執(zhí)行sleep()、suspend()等方法,失去所占用資源,該線程從運行--》阻塞狀態(tài),睡眠時間到達或獲得資源進入就緒狀態(tài);

? ?????????????????等待阻塞:運行狀態(tài)中的線程執(zhí)行 wait() 方法,使線程進入到等待阻塞狀態(tài);

? ? ? ? ? ? ? ? ? ?同步阻塞:線程在獲取 synchronized 同步鎖失敗(因為同步鎖被其他線程占用);

? ? ? ? ? ? ? ? ? ?其他阻塞:通過調(diào)用線程的 sleep() 或 join() 發(fā)出了 I/O 請求時,線程就會進入到阻塞狀態(tài), ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?當(dāng)sleep() 狀態(tài)超時,join() 等待線程終止或超時,或者 I/O 處理完畢,線程重新轉(zhuǎn)入就緒狀態(tài);

死亡狀態(tài):一個運行狀態(tài)的線程完成任務(wù)或者其他終止條件發(fā)生時,該線程就切換到終止?fàn)顟B(tài);


線程的優(yōu)先級

意義:每一個 Java 線程都有一個優(yōu)先級,這樣有助于操作系統(tǒng)確定線程的調(diào)度順序;

級別:用1-10之間的整數(shù)表示,數(shù)值越大優(yōu)先級越高,默認(rèn)的優(yōu)先級為5;

注意:線程優(yōu)先級不能保證線程執(zhí)行的順序,優(yōu)先級高的線程獲取CPU資源的概率較大,優(yōu)先級低的并非沒機會執(zhí)行;


線程的創(chuàng)建

Java 提供了三種創(chuàng)建線程的方法:

????????1.通過實現(xiàn) Runnable 接口;

????????2.通過繼承 Thread 類本身;

????????3.通過 Callable 和 Future 創(chuàng)建線程;

一、實現(xiàn)Runnable接口

核心:Thread(Runnable threadOb); ? ?//創(chuàng)建Thread類傳入實現(xiàn)了runnable接口的實現(xiàn)類(重寫run方法)

實現(xiàn)runnable

二、繼承Thread類

核心:創(chuàng)建繼承了Thread類的子類實例(重寫run方法),調(diào)用start();(本質(zhì)上也是實現(xiàn)了runnable接口)

繼承Thread類

三、實現(xiàn)?Callable 接口

核心:Callable接口類似Runnable接口,不同點在于Callable有返回值,使用時實現(xiàn)類實例需要Future包裹一層。

實現(xiàn)Callable接口

總結(jié):1.繼承Thread,特點:單繼承問題,獲取當(dāng)前線程可直接用this,無需使用Thread.currentThread() ;

? ? ? ? ? ?2.實現(xiàn)Runnable,特點:傳入Thread構(gòu)造;

? ? ? ? ? ?3.實現(xiàn)Callable,特點:有返回值,F(xiàn)utureTask包裹后傳入Thread構(gòu)造;


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。