多執行緒基礎概念2 常用api方法

2021-10-25 02:03:55 字數 3578 閱讀 9382

執行緒的生命週期

初始/新建狀態:

使用 new 關鍵字和 thread 類或其子類建立乙個執行緒物件後,該執行緒物件就處於初始/新建狀態。它保持這個狀態直到程式 start() 這個執行緒。

就緒狀態:

當執行緒物件呼叫了start()方法之後,該執行緒就進入就緒狀態。就緒狀態的執行緒處於就緒佇列中,要等待jvm裡執行緒排程器的排程。

執行狀態:

如果就緒狀態的執行緒獲取 cpu 資源,就可以執行 run(),此時執行緒便處於執行狀態。處於執行狀態的執行緒最為複雜,它可以變為阻塞狀態、就緒狀態和終止狀態。

阻塞狀態:

如果乙個執行緒執行了sleep(睡眠)、suspend(掛起)等方法,失去所占用資源之後,該執行緒就從執行狀態進入阻塞狀態。在睡眠時間已到或獲得裝置資源後可以重新進入就緒狀態。可以分為三種:

終止狀態:

乙個執行狀態的執行緒完成任務或者其他終止條件發生時,該執行緒就切換到終止狀態。

常見方法屬性

啟動乙個執行緒-start()

public

class

test})

; thread.

start();}}

建立了乙個執行緒並且重寫了run()並不意味著它就開始執行了。實際是:我建立了乙個執行緒,並且告訴它需要做什麼(run()),但是它自己不能自動開始,而是需要呼叫start(),告訴它,可以開始工作了,這時候執行緒才可以開始執行

一定要注意 run 方法和 start 方法是不同的,啟動執行緒必須要呼叫 start 方法。

執行緒讓步 - yield()

當前執行緒讓出cpu ,其他執行緒先執行,自己轉為就緒態。

package yieldtest;

public

class

yieldtest})

.start()

;//主線程讓步

while

( thread.

activecount()

>1)

system.out.

println

(thread.

currentthread()

.getname()

);}}

主線程沒有讓步結果:

main

thread-

0

主線程讓步結果:

thread-

0main

因為建立乙個執行緒的時間比主線程執行的時間長,如果主線程沒有讓步,則先執行到主線程的列印函式。如果主線程呼叫yield()讓步,則先把建立的執行緒執行結束,自己再繼續執行

執行緒等待 - join

package jointest;

public

class

jointest

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

);}}

);t.

start()

;system.out.

println

(thread.

currentthread()

.getname()

);}}

t.join():無參構造表示引用join()的執行緒 a(在**呼叫誰就是a),等待被引用執行緒 b (此處為t)執行結束再執行

thread-

0main

join(time):帶參構造表示引用join(time)的執行緒a,在滿足以下條件之一後開始執行。

main

thread-

0

中斷執行緒

通過 thread 物件呼叫 interrupt() 方法通知該執行緒停止執行,具體停止與否,由執行緒決定。

thread 收到通知的方式有兩種:

**a:

public

class

test

catch

(interruptedexception e)

for(

int i =

0; i <

5; i++)}

}); thread.

start()

; thread.

interrupt();}}

通過異常收到了中斷情況 // 通過異常收到中斷通知,並且標誌位被清

false

false

false

false

**b:

public

class

test}}

);thread.

start()

; thread.

interrupt();}}

true

// 只有一開始是 true,後邊都是 false,因為標誌位被清

false

false

false

false

**c:

public

class

test}}

);thread.

start()

; thread.

interrupt();}}

true

// 全部是 true,因為標誌位沒有被清

true

true

true

true

常用方法,不具體解釋

返回當前執行緒物件的引用

public

static thread currentthread()

;

休眠當前執行緒 millis 毫秒

public

static

void

sleep

(long millis)

throws interruptedexception

java多執行緒 基礎概念

join 方法 在很多情況下,主線程生成並起動了子執行緒,如果子執行緒裡要進行大量的耗時的運算,主線程往往將於子執行緒之前結束,但是如果主線程處理完其他的事務後,需要用到子執行緒的處理結果,也就是主線程需要等待子執行緒執行完成之後再結束,這個時候就要用到join 方法了。wait方法 呼叫obj的w...

Linux多執行緒實踐 2 執行緒基本API

與執行緒有關的函式構成了乙個完整的系列,絕大多數函式的名字都是以 pthread 開頭,要使用這些函式庫,要通過引入頭文,而且鏈結這些執行緒函式庫時要使用編譯器命令的 lpthread 選項 ubuntu系列系統需要新增的是 pthread 選項而不是 lpthread 如ubuntu 14.04版...

常用多執行緒方法

reentrantlock類 synchronized關鍵字,屬於悲觀鎖。可重入鎖,即遞迴鎖。指在同一執行緒內,外層函式獲得鎖之後,內層遞迴函式仍然可以獲得該鎖。作用 防止在同一執行緒中多次獲取鎖而導致死鎖發生。j a.util.concurrent.atomic包下的atomicreference...