首先要知道執行緒的幾個基本狀態:
(1)初始狀態:即new後還未呼叫start()的狀態。此時執行緒不會去和其他執行態的執行緒搶cpu資源。
(2)可執行態:即執行緒物件呼叫了start( )之後的所處狀態。此時執行緒就具有了和其他執行緒同等競爭力權力.隨時有可以 得到cpu資源而進入執行狀態
(3)執行狀態
(4)執行緒的阻塞狀態:
如果乙個執行緒呼叫了執行了sleep()或wait()或join或yeid()或是遇到io阻塞等問題。執行這些方法的執行緒就會處於阻寒塞狀態。
1.sleep()是讓執行緒休眠一定時間,在進行休眠阻塞期間,會一直占用著cpu,且不會釋放鎖.
2.執行wait()**的執行緒會從可執行進入等待佇列,從而阻塞。每個物件都有乙個監視器和乙個等待佇列,和乙個鎖池。而呼叫wait()的執行緒就會掉進等待佇列,從面被阻塞,掉進去自己還爬不上來。直接有其他執行緒呼叫這個物件的notify()或noitityall()方法將指定執行緒或全部在引物件等待池中的執行緒喚醒,然後被喚醒執行緒從等待狀態變成可執行狀態,進入鎖池時,處於等待鎖池狀態,這個鎖池有個先來後到的關係,即先來後到的順序,排在前面的執行緒先拿到物件鎖。致於執行緒從等待池跳到鎖池的演算法,不同的作業系統有不同的演算法實現.unix系統反正是從等待池中亂隨機選擇乙個進入鎖池。而windows系統則是按執行緒的優先線進行選擇。優先線高的先執行:這樣會出現乙個問題,要等到高優先順序的執行緒完全執行完了後才會執行低優先順序的執行緒,但也不一定。優先順序低的執行緒會越餓,從而會先執行也不一定
3.join():阻斷當前執行緒的執行,而執行呼叫該方法的執行緒物件的run方法,一直到該物件的方法全部結束了,才會等待原來的執行緒
4.yeild()方法:中止當前執行緒的執行,讓執行緒排程程式(這是作業系統的內部機制)重新進行一次選擇,挑選乙個執行緒進行執行。當然,原本讓出cpu的執行緒也在其中。這和sleep(0)的效果是一樣的
5.interrupt:打斷當前執行緒正在做的事。如果當前執行緒在io阻塞,會關閉io通道等.
(4)死亡狀態:執行緒執行完run方法體的進入死亡狀態,以前還有stop方法,但是jdk5已經將stop列為過時方法了。如果想要讓某個執行緒死亡,可以採用乙個標誌。如果達到這個標準,整個run方法return。讓它提前執行完方法體.從而壽中正初寢.
我所知道的EC Preface
我所知道的ec preface knowledge sharing is the best reusej 所以打算寫一篇 我所知道的ec 系列。取名為 我所知道的ec 是緣於網路上有一篇講述system bios的好文章叫做 我所知道的 bios 另外該系列文章是小弟的一家之言,希望各位前輩多多指教...
我所知道的EC PowerSequence
我所知道的ec powersequence what s power sequence power sequence 是指hw device 上電的順序 它的大致順序如下 1 always 2 sus on 3 dimm on 4 run on 5 vr on 這 基本上是 nb工作需要的所有pow...
我所知道的(1)
我所知道的之序言 最近總有朋友詢問我的事情,問得多了,也就回憶的多了,興奮的時候,就想乾脆整理成文字吧,也算對自己自06年以來給做諮詢的乙個總結。從06年以來我給的3個事業群做過了cmmi的諮詢,2次2級,3次3級,累計現場諮詢天數超過150天吧,所以日積月累,對有所了解。為了避免不必要的麻煩,我認...