執行緒間通訊 執行緒優先順序 Thread 執行緒池

2021-08-22 11:54:19 字數 1688 閱讀 8959

1.執行緒間通訊

多個執行緒 操作同乙個資源 但是操作的動作不同

例如:銀行卡  -->存錢 -->取錢

執行緒的等待喚醒機制:

wait() 等待 讓執行緒進入凍結狀態 放棄了執行權 等待的執行緒會放到等待池中

notify() 喚醒 會喚醒等待池中的執行緒 喚醒的是第乙個等待的執行緒

notifyall() 喚醒等待的所有執行緒

例如:兩個人一起吃飯 交替著吃

我吃的時候 你別動

你吃的時候 我不動

是object類中的方法

必須在同步中使用 不然會丟擲異常

synchronized的鎖 是任意物件

等待 喚醒的 是持有該鎖的執行緒

所以 任意物件都可以呼叫 上述方法

對於這種 任意物件都可以呼叫的方法 應該定義在object類中

只有同乙個鎖上的被等待執行緒 可以被同乙個鎖上的執行緒喚醒

2.生產者消費者模式

先生產 再消費

滿足乙個條件 需要先有商品 才能夠消費

3.thread類中的其他方法

3.1 停止執行緒

如何讓乙個執行緒結束 其實只有一種方法 就是讓run()方法結束

因為我們在實際操作執行緒時 多伴隨迴圈

1.定義迴圈結束標記 讓迴圈結束

2.使用interrupt()方法 中斷執行緒

如果執行緒在呼叫 object 類的 wait()、wait(long) 或 wait(long, int) 方法,

或者該類的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 

方法過程中受阻,則其中斷狀態將被清除,它還將收到乙個 interruptedexception。 

wait() 將執行緒從執行狀態 轉到凍結狀態

notify() 喚醒 將執行緒從凍結狀態 轉到執行狀態

sleep(毫秒)執行緒進入凍結狀態 但是他會自動醒來

interrupt()屬於不正常喚醒 會出現中斷異常

當後台執行緒開啟後 會和 前台執行緒一樣 都可以搶奪cpu的執行權

但是 結束不一樣 當所有的前台執行緒都結束後 後台執行緒會跟著自動結束

唐僧 和 四個徒弟

唐僧 前台執行緒

四個徒弟 守護前台執行緒的後台執行緒

3.3 加入執行緒

void join() 等待該執行緒終止。 

b.join(); //插隊

在a執行緒中 呼叫了 b執行緒的join方法

表示 只有當 b執行緒執行完畢後 a執行緒才能繼續執行

a執行緒繼續執行 才會啟動其他執行緒

void join(long millis) 等待該執行緒終止的時間最長為 millis 毫秒。

3.4 執行緒優先順序

執行緒的優先順序 一共 10級

從1~10 預設優先順序是5

static int max_priority 

執行緒可以具有的最高優先順序。 

static int min_priority 

執行緒可以具有的最低優先順序。 

static int norm_priority 

分配給執行緒的預設優先順序。

void setpriority(int newpriority) 更改執行緒的優先順序。 

public string tostring()返回該執行緒的字串表示形式,包括執行緒名稱、優先順序和執行緒組。 

執行緒優先順序

執行緒優先順序由執行緒所屬程序的優先順序類 執行緒自身的相對優先級別共同確定,二者組合值作為執行緒的基優先順序。base priority level win32系統中,執行緒基優先順序的範圍從最低優先順序0到最高優先順序31。系統優先順序程式優先順序類別 執行緒優先順序等級 1idle prior...

執行緒優先順序

優先順序是執行緒排程的重要依據。優先順序高的執行緒,永遠先獲得cpu的青睞。當然啦,作業系統會視情況調整各個執行緒的優先順序。例如前台執行緒的優先順序應該調高一些,後台執行緒的優先順序應該調低一些。執行緒的優先順序範圍從0 最低 到31 最高 當你產生執行緒時,並不是直接以數值指定其優先順序,而是採...

執行緒優先順序

知識點 執行緒優先順序 獲取當前執行緒控制代碼 執行緒優先順序設定 執行緒優先順序變動 執行緒優先順序獲取 一 執行緒優先順序 thread priority 簡單的說就是 執行緒 的優先順序越高,那麼就可以分佔相對多的cpu時間片。每個程序都有相應的優先順序,優先順序決定它何時執行和占用 cpu ...