線程的生命週期

1.線程的生命週期

線程是一個動態執行的過程,它也有一個從產生到死亡的過程。

(1)生命週期的五種狀態

新建(new Thread)
當創建Thread類的一個實例(對象)時,此線程進入新建狀態(未被啓動)。
例如:Thread  t1=new Thread();

就緒(runnable)
線程已經被啓動,正在等待被分配給CPU時間片,也就是說此時線程正在就緒隊列中排隊等候得到CPU資源。例如:t1.start();

運行(running)
線程獲得CPU資源正在執行任務(run()方法),此時除非此線程自動放棄CPU資源或者有優先級更高的線程進入,線程將一直運行到結束。

死亡(dead)
當線程執行完畢或被其它線程殺死,線程就進入死亡狀態,這時線程不可能再進入就緒狀態等待執行。

自然終止:正常運行run()方法後終止

異常終止:調用stop()方法讓一個線程終止運行

堵塞(blocked)
由於某種原因導致正在運行的線程讓出CPU並暫停自己的執行,即進入堵塞狀態。

正在睡眠:用sleep(long t) 方法可使線程進入睡眠方式。一個睡眠着的線程在指定的時間過去可進入就緒狀態。

正在等待:調用wait()方法。(調用motify()方法回到就緒狀態)

被另一個線程所阻塞:調用suspend()方法。(調用resume()方法恢復)

2.常用方法

void run()   創建該類的子類時必須實現的方法

void start() 開啓線程的方法

static void sleep(long t) 釋放CPU的執行權,不釋放鎖

static void sleep(long millis,int nanos)

final void wait()釋放CPU的執行權,釋放鎖

final void notify()

static void yied()可以對當前線程進行臨時暫停(讓線程將資源釋放出來)

3.(1)結束線程原理:就是讓run方法結束。而run方法中通常會定義循環結構,所以只要控制住循環即可

(2)方法----可以boolean標記的形式完成,只要在某一情況下將標記改變,讓循環停止即可讓線程結束

(3)public final void join()//讓線程加入執行,執行某一線程join方法的線程會被凍結,等待某一線程執行結束,該線程纔會恢復到可運行狀態

4. 臨界資源:多個線程間共享的數據稱爲臨界資源

(1)互斥鎖

a.每個對象都對應於一個可稱爲“互斥鎖”的標記,這個標記用來保證在任一時刻,只能有一個線程訪問該對象。

b.Java對象默認是可以被多個線程共用的,只是在需要時才啓動“互斥鎖”機制,成爲專用對象。

c.關鍵字synchronized用來與對象的互斥鎖聯繫

d.當某個對象用synchronized修飾時,表明該對象已啓動“互斥鎖”機制,在任一時刻只能由一個線程訪問,即使該線程出現堵塞,該對象的被鎖定狀態也不會解除,其他線程任不能訪問該對象。

 

 

原文出自:http://blog.csdn.net/mayouarebest8621/article/details/6755036

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章