高併發(4) 執行緒的狀態

2021-10-04 09:33:04 字數 1831 閱讀 5487

上篇文章講解了多執行緒的停止方法。我們本篇文章來講講多執行緒的執行狀態。

一、多執行緒的執行狀態。

我們都知道,執行緒分為新建、就緒、執行、阻塞、死亡這幾種狀態,這些狀態分別是什麼意思呢,來看一下。

新建:指的是執行緒新建立出來,並沒有執行start方法,這時候就是新建狀態,沒有執行**。

就緒:就緒狀態指的是執行緒呼叫了start方法,執行緒準備就緒,爭搶cpu,當搶到cpu的時候,才可以進行執行**。因為在單cpu的計算機系統中,不可能同時執行多個執行緒,乙個時刻僅有乙個執行緒處於執行狀態。因此此時可能有多個執行緒處於就緒狀態。

執行:執行值得是執行緒搶到了cpu的後,進入執行狀態,執行run方法, 開始實際的**執行。

阻塞:阻塞狀態是執行緒執行中,由於某些原因進入阻塞狀態。例如執行緒通過sleep方法進入睡眠狀態,等待觸發某個條件。阻塞狀態就是正在執行的執行緒沒有結束,暫時讓出cpu,這時候其他處於執行狀態的執行緒就可以獲取cpu,進入執行狀態。

死亡:死亡狀態是指執行緒run()、main() 方法執行結束,或者因異常退出了run()方法,則該執行緒結束生命週期。死亡的執行緒不可再次復生。

二、執行緒狀態的變化

執行緒的狀態變化如下:

其中涉及到了yield方法和join方法,來講解一下。

yield方法是:暫停當前執行的執行緒,放棄cpu資源,執行其他執行緒。是讓執行緒從執行狀態回到可執行狀態,但是實際無法保證yield()可以達到讓步的目的,因為當前執行緒可以能會再次搶占到cpu。在大多數情況下,yield()將導致執行緒從執行狀態轉到可執行狀態,但有可能沒有效果

join方法是:join把指定的執行緒加入到當前執行緒,可以把交替執行的兩個執行緒合併為順序執行,例如執行緒b呼叫執行緒a的join方法,那麼將先執行完a執行緒,才會執行執行緒b,如下面**所示

/**

* @version 1.0

* @description joindemo

* @author wb.yang

*/public class joindemo

@override

public void run()

} catch (interruptedexception e)

//休眠2秒

sleeptools.second(2);

system.out.println(thread.currentthread().getname()

+ " goddess打飯完成.");

} }/**

* 女神的男朋友

*/static class goddessboyfriend implements runnable

} public static void main(string args) throws exception

}

從**中可以看出總共有三個執行緒,湯姆,女神,女神男朋友三個執行緒,如果正常的執行緒的話,執行順序是不一定的,就是說這個是那個執行緒都有可能先執行完,然後看看執行結果把。

從結果中看出,執行緒是有執行順序的,這就是因為我們用了join方法,在湯姆的執行緒中呼叫了女神執行緒的join方法,所以湯姆執行緒就要等待女神執行緒先執行完畢,而在女神執行緒中,有呼叫的女神男朋友的執行緒,所以又要等待女神男朋友執行緒的執行完畢,所以最終結果就是女神男朋友先打完飯,然後是女神,最後是湯姆。這就是join方法的作用。

1.執行緒的五種狀態,新建、就緒、執行、阻塞、死亡

2.執行緒的兩個方法,yield和join方法

執行緒的併發 並行以及高併發

當多個執行緒在操作的時候,如果系統只有乙個cpu,同一時刻就只有一條執行緒指令在執行,但是各個執行緒指令被快速的輪換執行,這就是的巨集觀上看起來是多個執行緒在同時執行。但微觀上並不是這樣,只是將時間分成若干個片段,多個執行緒交替執行。如圖系統只有1個cpu,執行緒就要通過競爭得到執行機會。誰得到cp...

多執行緒高併發

修飾靜態方法鎖的是class,非靜態鎖方法鎖的是this,只有拿到這個物件才可以繼續執行 synchronized是可重入鎖 執行緒1的方法1呼叫執行緒2的方法2,判斷是同一把鎖,在同乙個執行緒,可以呼叫。synchronized的鎖公升級 hotsport 鎖公升級過程 保證執行緒可見性 mesi...

多執行緒高併發

個人總結,帶有個人主觀,請選擇性 1,實現 runable 2,使用 thread 3,執行緒池建立 executorse newcachedthreadpool 其實哪有那麼多建立方式,本質上都是實現了runable 介面。只列出大部分使用的方法,並未代表所有執行緒方法,後續會新增實際的例子,以供...