線程狀態(tài)
new 至今尚未啟動的線程處于這種狀態(tài)。
runnable正在Java虛擬機中執(zhí)行的線程處于這種狀態(tài)。
blocked受阻塞并等待某個監(jiān)視器鎖的線程處于這種狀態(tài)。
waiting無限期的等待另一個線程來執(zhí)行某一特定操作的線程處于這種狀態(tài)。
timed_waiting等待另一個線程來執(zhí)行取決于指定等待時間的操作的線程處于這種狀態(tài)。
terminated已退出的線程處于這種狀態(tài)。
阻塞狀態(tài):具有CPU的執(zhí)行資格,等待CPU空閑時執(zhí)行。
休眠狀態(tài):放棄CPU的執(zhí)行資格,CPU空閑也不執(zhí)行。
進(jìn)入到TimeWaiting(計時等待)有兩種方式
(1)使用sleep(long m)方法,在毫秒值結(jié)束之后,線程睡醒進(jìn)入到Runnable/Block狀態(tài)
(2)使用wait(long m)方法,wait方法如果在毫秒值結(jié)束之后,還沒被notify喚醒,就會自動醒來,線程睡醒進(jìn)入到Runnable/Block狀態(tài)。
喚醒的方法:
void notify()喚醒在此對象監(jiān)視器上等待的單個線程。
void notifyAll()喚醒在此對西那個監(jiān)視器上等待的所有線程。
線程間通信
多個線程在處理同一個資源,但是處理的動作(線程的任務(wù))卻不相同。
等待喚醒機制
重點:有效的利用資源
如果能獲取鎖,線程就從waiting狀態(tài)變?yōu)閞unnable狀態(tài);否則從wait set出來,進(jìn)入到entry set,線程就從waiting狀態(tài)又變成blocked狀態(tài)。
使用到的三個方法:wait, notify, notifyAll
等待喚醒機制其實就是生產(chǎn)者與消費者問題