一個(gè)線程創(chuàng)建之后,,總是處于其生命周期的4個(gè)狀態(tài)之一中,。線程的狀態(tài)表明此線 程當(dāng)前正在進(jìn)行的活動(dòng),,而線程的狀態(tài)是可以通過程序來進(jìn)行控制的,,就是說,,可以對(duì)線程進(jìn)行操作來改變狀態(tài),。這些操作包括啟動(dòng)(start),、終止(stop)、睡眠(sleep),、掛起 (suspend),、恢復(fù)(resume)、等待(wait)和通知(notify),。每一個(gè)操作都對(duì)應(yīng)了一個(gè)方法,,這些方法是由java.lang提供的。 線程狀態(tài)在Java中是通過一個(gè)Thread的內(nèi)部枚舉State標(biāo)識(shí)的,。
如果創(chuàng)建了一個(gè)線程而沒有啟動(dòng)它,,那么,此線程就處于創(chuàng)建狀態(tài),。比如,,下述語句執(zhí)行 以后,使系統(tǒng)有了一個(gè)處于創(chuàng)建狀態(tài)的線程myThread: Thread t= new ThreadClass(); 其中,,ThreadClass()是Thread的子類,,而Thread是由java.lang提供的。 處于創(chuàng)建狀態(tài)的線程還沒有獲得應(yīng)有的資源,,所以,,這是一個(gè)空的線程。線程只有通過啟動(dòng)后,,系統(tǒng)才會(huì)為它分配資源,。對(duì)處于創(chuàng)建狀態(tài)的線程可以進(jìn)行兩種操作:一是啟動(dòng) (start)操作,使其進(jìn)入可運(yùn)行狀態(tài),,二是終止(stop)操作,,使其進(jìn)入消亡狀態(tài)。如果進(jìn)入到消 亡狀態(tài),,那么,,此后這個(gè)線程就不能進(jìn)入其他狀態(tài),也就是說,,它不再存在了,。 start方法是對(duì)應(yīng)啟動(dòng)操作的方法,其具體功能是為線程分配必要的系統(tǒng)資源,;將線程設(shè)置為可運(yùn)行狀態(tài),從而可以使系統(tǒng)調(diào)度這個(gè)線程。 通過調(diào)用t.start()啟動(dòng)一個(gè)線程,,使該線程進(jìn)入可運(yùn)行(Thread.State.RUNNABLE)的狀態(tài),。 由JVM的決定去調(diào)度(Scheduler) 在可運(yùn)行狀態(tài)(Runnable)下的線程,使該線程處于運(yùn)行 (Running) 狀態(tài),由于JVM的調(diào)度會(huì)出現(xiàn)不可控性,即不是優(yōu)先級(jí)高的先被調(diào)用,,可能先調(diào)用,,也可能后調(diào)用的的情況。運(yùn)行狀態(tài)(Running)下,,調(diào)用禮讓yield()方法,,可以使線程回到可運(yùn)行狀態(tài)(Runnable)下,再次JVM的調(diào)度(并不依賴優(yōu)先級(jí)),。 線程執(zhí)行完畢或異常退出會(huì)進(jìn)入終止?fàn)顟B(tài)(Thread.State.TERMINATED),。 其余的還有幾個(gè)狀態(tài): Thread.State.BLOCKED 受阻塞并且正在等待監(jiān)視器鎖的某一線程的線程狀態(tài)。處于受阻塞狀態(tài)的某一線程正在等待監(jiān)視器鎖,,以便進(jìn)入一個(gè)同步的塊/方法,,或者在調(diào)用 Object.wait 之后再次進(jìn)入同步的塊/方法。 Thread.State.WAITING 某一等待線程的線程狀態(tài),。某一線程因?yàn)檎{(diào)用下列方法之一而處于等待狀態(tài): 不帶超時(shí)值的 Object.wait 不帶超時(shí)值的 Thread.join LockSupport.park 處于等待狀態(tài)的線程正等待另一個(gè)線程,,以執(zhí)行特定操作。 例如,,已經(jīng)在某一對(duì)象上調(diào)用了 Object.wait() 的線程正等待另一個(gè)線程,,以便在該對(duì)象上調(diào)用 Object.notify() 或 Object.notifyAll()。已經(jīng)調(diào)用了 Thread.join() 的線程正在等待指定線程終止,。 TIMED_WAITING具有指定等待時(shí)間的某一等待線程的線程狀態(tài),。某一線程因?yàn)檎{(diào)用以下帶有指定正等待時(shí)間的方法之一而處于定時(shí)等待狀態(tài): Thread.sleep 帶有超時(shí)值的 Object.wait 帶有超時(shí)值的 Thread.join LockSupport.parkNanos LockSupport.parkUntil |
|