執行緒有幾種狀態:
1.產生(new):執行緒已經產生,只是放在記憶體中啥事都不幹。
2.可執行(runnable):在呼叫了start方法到它獲得系統給它分配了時間片之前,或者時間片用完了但還沒執行完。
3.執行(running):獲得了時間片,正在執行。
4.死亡(dead):執行完成
5.阻塞(block):不可執行狀態都是由可執行狀態轉變來的。乙個處於可執行狀態的執行緒,如果遇到掛起 (suspend)操作、睡眠(sleep)操作或者等待(wait)操作,就會進入不可執行狀態。另外,如果 乙個執行緒是和i/o操作有關的,那麼,在執行i/o指令時,由於外設速度遠遠低於處理器速 度而使執行緒受到阻塞,從而進入不可執行狀態,只有外設完成輸入/輸出之後,該執行緒才會自 動回到可執行狀態。執行緒進入不可執行狀態後,還可以再回到可執行狀態。通常有三種途徑 使其恢復到可執行狀態。
通過睡眠(sleep)操作而進入不可執行狀態的執行緒會在過了指定睡眠時間以後自動恢 復到可執行狀態;由於i/o阻塞而進入不可執行狀態的執行緒在外設完成i/o操作後,自動 恢復到可執行狀態。
通過wait()方式進入第五種方式的執行緒可以用通知(notify或notiya11)方法使其轉到第二種狀態。
從作業系統的角度講,os會維護乙個ready queue(就緒的執行緒佇列)。並且在某一時刻cpu只為ready queue中位於佇列頭部的執行緒服務。
sleep(int millis):應該是第五種狀態,但在指定的毫秒數到了之後又會回到就緒佇列中即第二種狀態。
yield():直接從第三種狀態拉到第二種狀態,不管時間片完沒有。
suspend(),resume():同過suspend方法可以使執行緒進入block狀態,進入該狀態後除非使用resume使其轉至runnable,否則它不會回到runnable狀態。執行了suspend方法後的執行緒他不會釋放它的鎖標識
關於一些輔助庫的thread(二)
thread庫用起來還是比較簡單 快捷的,只需要繼承一下,就可以直接應用,個人感覺比較爽。建立thread類,裡面包括建構函式,virtual析構函式,建構函式主要是初始化一些資料,比如控制代碼和threadid,還有兩個bool狀態成員。析構主要就是 handle.然後是開始函式start,裡面主...
Thread的一些基本操作
1 執行緒的兩種建立方式 1 繼承thread類 class xc extends thread xc string name public void run public class threaddemo01 2 實現runnable介面 建立執行緒方式二 繼承runnable介面 練習 賣票 c...
關於Thread類中run 方法的一些見解
先看段 public class threaddemo start 結果如下 thread thread 0 thread thread 0 thread thread 0 thread thread 0 thread thread 0 再看段 public class threaddemo sta...