執行緒二 多執行緒基礎

2022-09-21 03:54:14 字數 2196 閱讀 5600

任務量比較大,通過多執行緒可以提高效率時,需要非同步處理時,占用系統資源,造成阻塞的工作時,都可以採用多執行緒提高效率

執行緒建立

使用者執行緒和守護執行緒

j**a分為兩種執行緒:使用者執行緒和守護執行緒

守護執行緒:

​ 在程式執行的時候在後台提供一種通用服務的執行緒,比如垃圾**執行緒就是乙個很稱職的守護者,並且這種執行緒並不屬於程式中不可或缺的部分。因 此,當所有的非守護執行緒結束時,程式也就終止了,同時會殺死程序中的所有守護執行緒。反過來說,只要任何非守護執行緒還在執行,程式就不會終止。

將執行緒轉換為守護執行緒可以通過呼叫 thread 物件的 setdaemon(true) 方法來實現。使用守護執行緒時需要注意:

執行緒優先順序

執行緒的切換是由執行緒排程控制的,我們無法通過**來干涉,但是我們通過提高執行緒的優先順序來最大程度的改善執行緒獲取時間片的機率,當然我們也只是盡力干擾,而不是絕對說優先順序高的一定先執行

執行緒的優先順序被劃分為10級,值分別為1-10【1最低,10最高】執行緒提供了3個常量來表示最低,最高,以及預設優先順序:

thread.min_priority 1

thread.max_priority 10

thread.norm_priority 5

thread.setpriority(int priority):設定執行緒的優先順序。

執行緒執行狀態

新建(new)

可執行(runnable)

執行(running)

阻塞(blocked)

死亡(dead)

執行緒常用api

常用執行緒api方法

start()

啟動執行緒

getid()

獲取當前執行緒id thread-編號 該編號從0開始

getname()

獲取當前執行緒名稱

stop()

停止執行緒,(已廢棄)

getpriority();

返回執行緒的優先順序【1-10】

boolean isalive()

測試執行緒是否處於活動狀態

isdaemon():

測試執行緒是否為守護執行緒【伴隨使用者執行緒執行】

isinterrupted();

測試執行緒是否已經中斷

thread.currentthread()

獲取當前執行緒物件

thread.state getstate()

獲取執行緒的狀態

常用執行緒建構函式

thread()

分配乙個新的 thread 物件

thread(string name)

分配乙個新的 thread物件,具有指定的 name正如其名。

thread(runable r)

分配乙個新的 thread物件

thread(runable r, string name)

分配乙個新的 thread物件

其他方法

static void sleep(long ms)

thread的靜態方法sleep用於使當前執行緒進入阻塞狀態,等時間到達之後自動喚醒

static void yield()

該方法用於使當前執行緒主動讓片出當次cpu時間片回到runnable狀態,等待分配時間片.

t1.join()

執行緒呼叫了join方法,那麼就要一直執行到該執行緒執行結束,才會執行其他程序. 這樣可以控制線程執行順序。

stop 和 interrupt

在開發中,經常會遇到需要停止乙個正在執行的執行緒的場景,以前的做法是通過thread.stop() 的方式來停止具體的執行緒,但是這個方法目前是被廢棄掉的,不推薦使用。不推薦使用的原因如下

因此,為了避免thread.stop()帶來的問題,推薦使用被稱作為interrupt(中斷)的協作機制來停止乙個正在執行的執行緒。在jvm中,每個執行緒都有乙個與之關聯的boolean屬性,被稱之為中斷狀態,可以通過thread.currentthread().isinterrupted()來獲取當前執行緒的中斷狀態,初始值為false。中斷狀態僅僅是執行緒的乙個屬性,用以表明該執行緒是否被中斷。

多執行緒系列(二) 多執行緒基礎

目錄 一 執行緒的幾種狀態 屬性 方法 執行緒的5個狀態 1 建立狀態 new 對應 thread th new thread worker 時 就建立了乙個新的執行緒,僅僅是新建狀態,程式還沒有執行執行緒中的 2 就緒狀態 runnable 對應 th.start 方法,新建執行緒在接收到star...

多執行緒基礎(二)

執行緒的優先順序 執行緒的優先順序有10個等級,分別用數字1 10表示 1是最低優先順序,10為最高,5為預設 理論上優先順序越高的執行緒獲取cpu時間片的次數就越多。執行緒是不能主動獲取cpu時間片的,只能被動的分配,通過調整優先順序可以最大程度改善獲取時間片的次數。interrupt方法 int...

執行緒基礎 實現多執行緒

public class thread01 extends thread public static void main string args public class thread02 implements runnable public static void main string args...