20110906 執行緒的生命週期和執行緒的同步
1、 新建狀態。 當建立thread類的乙個例項(物件)時,此執行緒進入新建狀態(未被啟動)。
2、 就緒:執行緒已經被啟動,正在等待被分配給cpu時間片,也就是說此時執行緒正在就緒佇列中排隊等候得到cpu資源
3、執行:執行緒獲得cpu資源正在執行任務(run()方法),此時除非此執行緒自動放棄cpu資源或者有優先順序更高的執行緒進入,執行緒將一直執行到結束。
4、死亡:自然終止:正常執行run()方法後終止
異常終止:呼叫stop()方法讓乙個執行緒終止執行
5、 堵塞
a) sleep() 將程式睡眠。 當時間到了。恢復到就緒狀態
b) wait() 呼叫motify()(喚醒執行緒)方法回到就緒狀態
c) suspend() 被另乙個執行緒所阻塞 resume()方法恢復
6、 執行緒的優先順序
a) 把執行緒從就緒狀態進入執行狀態的過程叫做執行緒排程,負責排程工作的機構叫做排程管理器
b) 優先順序 執行緒的優先順序的取值範圍是1—10
i. max_priority
ii. norm_priority
iii. min_priority
iv. 得到貨修改執行緒的優先順序 final int getpriority() final void setpriority(int newpriority)
7、 常用方法 run() start() sleep(long t) sleep(long millis,int nanos) nanos引數為有納秒
a) yield() 暫停執行緒,讓步的方法 當前執行緒進入就緒狀態,不是堵塞狀態。
b) join() 方法 讓執行緒加入執行,執行某一線程join方法的執行緒會被凍結,等待某一線程執行結束,該執行緒才會恢復到可執行狀態
c) wait() 與notify() 方法 是成對。 暫停和恢復
d) interrupt(): 清楚執行緒的凍結狀態 強制清楚
e) stop() 有風險,終止。已過時
停止方法: 1。在迴圈設定標誌,判斷用break跳出迴圈
2.執行緒處於堵塞狀態, interrupt() 中斷執行緒 interrupted()測試是否中斷。在第一次呼叫已清除了其中斷狀態之,且第二次呼叫檢驗完中斷狀後態前,當前執行緒再次中斷的情況除外,如果連續兩次呼叫該方法,則第二次呼叫將返回 false isiterrupted() 此時執行緒是否已經中斷,執行緒的中斷狀態不受該方法的影響。
f) isalive() 判斷是否為活動的執行緒。
h) currentthread() 獲取到當前的執行緒物件 然後 t1.getname() 獲得執行緒名字
9、執行緒的同步 synchronization
互斥鎖 標記,這個標記用來保證在任一時刻,只能有以個執行緒訪問該物件 關鍵字 synchronized 用來與物件的互斥鎖聯絡
加鎖方式 synchronized(this){} 在方法宣告中,表示整個方法為同步方法
public synchronized char pop(){} 同步方法只有乙個。
鎖的是物件。
好處 解決了執行緒安全問題
弊端 降低了執行效率
同步巢狀,容易出現死鎖。
解決死鎖 wait() 方法
執行緒的生命週期和執行緒的同步
1 新建狀態。當建立thread類的乙個例項 物件 時,此執行緒進入新建狀態 未被啟動 2 就緒 執行緒已經被啟動,正在等待被分配給cpu時間片,也就是說此時執行緒正在就緒佇列中排隊等候得到cpu資源 3 執行 執行緒獲得cpu資源正在執行任務 run 方法 此時除非此執行緒自動放棄cpu資源或者有...
執行緒的生命週期
1.新建 threadd thread new thread runnable 2.就緒 thread.start 將執行緒放入就緒等待佇列中,等待cpu時間片的分配 3.執行 獲取到cpu時間片,一直執行到結束,除非有優先順序更高執行緒進入或者自動放棄cpu資源 4.死亡 正常結束或被其他執行緒殺...
執行緒的生命週期
如上圖 new乙個thread,則執行緒處於新建狀態。呼叫start 則處於就緒狀態,至於什麼時候執行,屬於系統排程的事情了,當run 或者call 執行體執行完成後,處於死亡狀態。執行狀態的執行緒,可能遇到以下情況而被阻塞 sleep 方法 io阻塞 等待同步鎖 等待通知 suspend 呼叫yi...