java執行緒基礎知識 建立執行緒的三種方式

2021-08-15 18:10:04 字數 1270 閱讀 8095

建立執行緒有三種方式:實現runnable介面、繼承thread類、實現callable介面,**如下:

對應的執行結果如下:

有些小夥伴可能會對結果二和結果三產生疑問,現在解釋如下(個人理解):

程式是呼叫了兩個執行緒來併發執行(不是並行),也就是兩個執行緒交替獲得cpu的執行權來執行自己執行緒棧中的程式,但是他們在執行的過程中,沒有辦法保證自己棧中**塊的原子性,也就是沒辦法保證從始到終一直執行,很可能在執行到一半的時候cpu的執行權就不屬於自己,於是自己進入阻塞的狀態。

變數的執行需要進行三個步驟:在記憶體中讀取、修改變數的值、將變數的值刷入記憶體。所以執行緒可能在任何乙個步驟就被阻塞住了。

就拿最後一張圖來做解釋:可以看到callable2一共執行了3次,值分別是0 1 2.可是callable1也有乙個值為2,這就是因為,當callable2在自己的記憶體中將i變數增加到3的時候,突然被阻塞,就是失去了cpu的執行權,從而結果2沒有被重新整理進入記憶體,這個變數值對callable1就是不可見的,所以在callable1執行的時候,在讀取記憶體中的資料的時候i變數仍然是1,所以callable1是在i=1的情況下執行的,執行到i=3的時候遇到了跟callable2一樣的情況,雖然在自己的棧記憶體中改變了變數的值但是主記憶體並沒有改變。

接著callable2獲得執行權,cpu恢復現場(cpu的策略),接著上次的位置繼續執行,所以輸出了2,而最後callable1輸出了4,由於資料的不可見導致多執行一次。

Java多執行緒基礎知識

一 執行緒執行狀態 1.執行緒執行狀態圖 執行緒共包括以下5種狀態。1.新建狀態 new 執行緒物件被建立後,就進入了新建狀態。例如,thread thread new thread 2.就緒狀態 runnable 也被稱為 可執行狀態 執行緒物件被建立後,其它執行緒呼叫了該物件的start 方法,...

Java基礎知識總結(執行緒)

1.執行緒的生命週期 建立 就緒 執行 阻塞 死亡 2.執行緒基本狀態 新建狀態 new thread t new mythread 就緒狀態 runnable 執行緒呼叫物件的start 方法 t.start 表示即將進入就緒狀態。處於就緒狀態的執行緒,說明做好準備隨時等待cpu排程執行。執行狀態...

執行緒的基礎知識

執行緒的狀態 執行緒的常用方法 自行建立執行緒池的七大引數 new threadpoolexecutor 執行wxecutorservices.execute runnable command 採用實現runnable callable介面的方式建立執行緒 執行緒了只是實現了runnble介面或者c...