java 執行緒的幾個方法

2021-08-26 15:38:17 字數 1245 閱讀 3800

[size=large][b]thread的方法[/b][/size]

[size=medium]

[b]sleep()[/b]

1. sleep ()函式有乙個引數,通過引數可使執行緒在指定的時間內進入停滯狀態,當指定的時間過後,執行緒則自動進入可執行狀態。[b]blocked執行緒池[/b]是進入阻塞狀態的執行緒,跟鎖沒有關係。

2. 當呼叫sleep ()函式後,執行緒不會釋放它的「鎖標誌」。

[b]yield()[/b]

1.通過yield ()函式,可使執行緒進入可執行狀態,排程器從可執行狀態的執行緒中重新進行排程。所以呼叫了yield()的函式也有可能馬上被執行。

2. 當呼叫yield ()函式後,執行緒不會釋放它的「鎖標誌」。

[b]join()[/b]

呼叫某執行緒的該方法,將當前執行緒與該執行緒"合併",即等待該執行緒結束,再恢復當前執行緒的執行。[i]當前執行緒[/i]就是當前這行**所在的執行緒。

[/size]

[size=large][b]object的方法[/b][/size]

[size=medium]

[b]wait()、notify()和notifyall()[/b]

1. wait()函式有兩種形式:第一種形式接受乙個毫秒值,用於在指定時間長度內暫停執行緒,使執行緒進入停滯狀態。第二種形式為不帶引數,代表waite()在notify()或notifyall()之前會持續停滯。[b]wait執行緒池[/b]是被wait的執行緒的集合,等待被notify。

2. 當對乙個物件執行notify()時,會從執行緒等待池中移走該任意乙個執行緒,並把它放到鎖標誌等待池中;當對乙個物件執行notifyall()時,會從執行緒等待池中移走所有該物件的所有執行緒,並把它們放到鎖標誌等待池中。[b]鎖標誌等待池中的執行緒[/b]就是等待獲取該物件的鎖許可權,synchronized也會讓執行緒進入鎖標誌等待池。

3. 當呼叫wait()後,執行緒會釋放掉它所占有的「鎖標誌」,從而使執行緒所在物件中的其它synchronized資料可被別的執行緒使用。

[color=red]

wait()和notify()因為會對加鎖的物件的「鎖標誌」進行操作,所以它們必須在synchronized函式或synchronized block中進行呼叫。如果在non-synchronized函式或non-synchronized block中進行呼叫,雖然能編譯通過,但在執行時會發生illegalmonitorstateexception的異常。通過對該物件的wait呼叫,會讓當前執行緒進入等待狀態。[/color]

[/size]

執行緒的幾個方法

thread.sleep long millis 一定是當前執行緒呼叫此方法,當前執行緒進入阻塞,但不釋放物件鎖,millis後執行緒自動甦醒進入可執行狀態。thread.yield 一定是當前執行緒呼叫此方法,當前執行緒放棄獲取的cpu時間片,由執行狀態變為就緒狀態 可執行狀態 讓os再次選擇執行...

執行緒的幾個盲點java

jion 當先執行緒呼叫另乙個執行緒的join 方法 例如 t1為當先執行緒 t1執行到t2.join 時,會等到t2執行緒執行完,才會繼續執行。此時t1處於阻塞狀態。t1為當前程序。執行到thread.sleep 時,該執行緒會從執行狀態變為阻塞狀態。注 阻塞狀態結束後,只能進入就緒狀態,無法進入...

java執行緒 執行緒的常用方法

方法詳解 start 和 run 方法 setname 和 getname setpriority 和 getpriority setdaemon yield 和 join interrupt 執行緒常用方法 方法 功能start 啟動執行緒並執行相應的run 方法 run 執行緒要執行的 放入ru...