1. 程式人生 > >Java多執行緒——執行緒優先順序與守護執行緒(Daemon Thread)

Java多執行緒——執行緒優先順序與守護執行緒(Daemon Thread)

一、執行緒優先順序

每個執行緒都可以通過thread.setPriority()實現程序優先順序的設定。可設定的範圍在1-10之間,如果超過此範圍將丟擲異常throw new IllegalArgumentException()。每個執行緒的預設優先順序為5。

tips:即使將某個執行緒的優先順序高於另一個執行緒的優先順序,並不意味著這個執行緒每次都能獲得cpu資源,只是有比較大的可能性佔用cpu資源。所以即使一個執行緒等級是10級,一個是1級,在執行操作時還是有可能會出現交替執行的現象。

 

二、守護執行緒

執行緒分類為:使用者執行緒(User Thread)、守護執行緒(Daemon Thread)

守護執行緒不是程式中不可或缺的部分,當所有的非守護執行緒結束時,程式也將隨之終止,同時殺死程序中的所有守護執行緒。反之而言,只要任何非守護執行緒還在執行,程式就不會終止。

實現方法:呼叫Thread物件的setDaemon(true)方法來實現。

Tips:

(1)thread.setDaemono(true)必須在thread.start()之前設定,否則會丟擲一個IllegalThreadStateException異常,不能將正在執行的常規執行緒設定為守護執行緒。

(2)在Daemon執行緒中產生的新執行緒也是Daemon的。

(3)守護執行緒應該永遠不去訪問固有資源,如檔案,資料庫,因為他會在任何時候甚至一個操作的中間發生中斷。

例子:垃圾回收執行緒,當程式中不再有任何執行的執行緒時,程式就不會產生垃圾,所有也不需要垃圾回收執行緒。