Java多執行緒基礎知識

2021-09-11 18:46:47 字數 1512 閱讀 8085

一、執行緒執行狀態

1. 執行緒執行狀態圖

執行緒共包括以下5種狀態。

1.新建狀態(new): 執行緒物件被建立後,就進入了新建狀態。例如,thread thread = new thread()。

2.就緒狀態(runnable): 也被稱為「可執行狀態」。執行緒物件被建立後,其它執行緒呼叫了該物件的start()方法,從而來啟動該執行緒。例如,thread.start()。處於就緒狀態的執行緒,隨時可能被cpu排程執行。

3.執行狀態(running): 執行緒獲取cpu許可權進行執行。需要注意的是,執行緒只能從就緒狀態進入到執行狀態。

4.阻塞狀態(blocked): 阻塞狀態是執行緒因為某種原因放棄cpu使用權,暫時停止執行。直到執行緒進入就緒狀態,才有機會轉到執行狀態。阻塞的情況分三種:

(01) 等待阻塞 -- 通過呼叫執行緒的wait()方法,讓執行緒等待某工作的完成。

(02) 同步阻塞 -- 執行緒在獲取synchronized同步鎖失敗(因為鎖被其它執行緒所占用),它會進入同步阻塞狀態。

(03) 其他阻塞 -- 通過呼叫執行緒的sleep()或join()或發出了i/o請求時,執行緒會進入到阻塞狀態。當sleep()狀態超時、join()等待執行緒終止或者超時、或者i/o處理完畢時,執行緒重新轉入就緒狀態。

5.死亡狀態(dead): 執行緒執行完了或者因異常退出了run()方法,該執行緒結束生命週期。

二、執行緒中的常用方法

1. start    啟動執行緒

2. run      執行執行緒

3. sleep  使當前執行緒由執行狀態進入休眠狀態。從running到blocked。不釋放鎖。

4. wait   使當前執行緒由執行狀態進入休眠狀態。從running到blocked。釋放鎖。

5. join    用於使執行緒同步執行。放棄當前執行緒的執行,執行呼叫join的執行緒。在start之後才有意義。

6. yield   使當前執行緒由執行狀態進入就緒。從running到runable。不釋放鎖。

7. notify   喚醒在此物件監視器上等待的單個執行緒。

8. notifyall   喚醒在此物件監視器上等待的所有執行緒。

三、為什麼notify和wait方法是在object中,而不是tread類中

因為notify和wait呼叫的時候和和synchronized一樣,會對「物件的同步鎖」進行操作。

操作步驟如下:

1. 執行緒呼叫wait方法,釋放物件的同步鎖,進入阻塞狀態,執行緒變為等待執行緒。

2. 用於喚醒等待執行緒的喚醒執行緒要想喚醒等待執行緒,要先獲取到等待執行緒的同步物件鎖,再呼叫notify方法將等待執行緒喚醒。

3. 喚醒後的等待執行緒並不能立即執行,要等待喚醒執行緒將物件的同步鎖釋放後,等待執行緒拿到該物件的同步鎖,才能繼續執行。

多執行緒基礎知識

建立乙個序列佇列,該佇列中從方的都是要依次執行的任務,dispatch queue serial 表示序列佇列的標示 dispatch queue t serialqueue dispatch queue create serial dispatch queue serial 建立乙個並行佇列,並行...

多執行緒 基礎知識

1 建立執行緒 extends thread implements runnable 啟動執行緒 threadl類的start 執行緒完成 1 run 方法執行完成 2 丟擲乙個未處理的異常導致執行緒的提前結束 2 執行緒的狀態 新建立 執行緒被建立,但是沒有呼叫start方法 可執行 runnab...

JAVA多執行緒基礎知識複習一

一.執行緒的基礎知識 1.什麼是程序 它是執行中的程式 2.什麼是執行緒 又稱輕量級程序,是程式的最小單元 3.建立執行緒的兩種方法 1 繼承thread類 public class demo1 class mythread extends thread 2 實現runable介面 public c...