1. 程式人生 > 實用技巧 >執行緒的優先順序和守護執行緒

執行緒的優先順序和守護執行緒

執行緒的優先順序和守護執行緒

執行緒優先順序

  1. 關於執行緒的優先順序問題,執行緒的優先順序分為1-10,優先順序越高,數量越大,當然了,java預設的優先順序是5.

  2. 我們可以通過getPriority()方法去得到它的預設值,我們還可以通過setPriority()方法去改變它的預設值.

  3. 如果執行緒的優先順序小於1或者大於10,則jdk報illegalArgumentException()異常.

package com.xxgc.state;

//測試執行緒的優先順序
public class TestPriority {
public static void main(String[] args) {
//主執行緒的優先順序
System.out.println(Thread.currentThread().getName()+"--->"+Thread.currentThread().getPriority());
MyPriority myPriority = new MyPriority();

Thread t1 = new Thread(myPriority);
Thread t2 = new Thread(myPriority);
Thread t3 = new Thread(myPriority);
Thread t4 = new Thread(myPriority);
Thread t5 = new Thread(myPriority);
Thread t6 = new Thread(myPriority);

//先設定優先順序,再啟動
t1.start(); //預設優先順序為5

t2.setPriority(6);
t2.start();

t3.setPriority(4);
t3.start();

t4.setPriority(Thread.MAX_PRIORITY); //MAX_PRIORITY=10
t4.start();

t5.setPriority(Thread.MIN_PRIORITY); //MIN_PRIORITY=1
t5.start();

t6.setPriority(8);
t6.start();

}
}
class MyPriority implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"--->"+Thread.currentThread().getPriority());
}
}

守護執行緒

1、定義:

守護執行緒,也可稱為服務執行緒,當程式中沒有可服務的執行緒時會自動離開。因此,守護執行緒的優先順序比較低,用於為其他的執行緒等提供服務

java中最典型的守護執行緒就是垃圾回收執行緒。當我們的應中用沒有任何常規執行緒執行時,就不會產生垃圾了,垃圾回收執行緒就無服務物件了,就會自動離開。它始終在低級別的狀態中執行,用於實時監控和管理系統中的可回收資源。

2、生命週期:

守護程序(Daemon)是執行在後臺的一種特殊程序。它獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。也就是說守護執行緒不依賴於終端,但是依賴於系統,與系統“同生共死”。那Java的守護執行緒是什麼樣子的呢。當JVM中所有的執行緒都是守護執行緒的時候,JVM就可以退出了;如果還有一個或以上的非守護執行緒則JVM不會退出。

虛擬機器必須確保使用者執行緒執行完畢

虛擬機器不用等待守護執行緒執行完畢

上帝守護例題

package com.xxgc.state;

//測試守護執行緒
//上帝守護你典例
public class TestDaemon {
public static void main(String[] args) {
God god = new God();
You you = new You();
Thread thread = new Thread(god);
thread.setDaemon(true); //預設是false表示是使用者執行緒,正常的執行緒都是使用者執行緒...

thread.start(); //上帝守護執行緒啟動

new Thread(you).start(); //你 使用者執行緒啟動...
}
}

//你
class You implements Runnable{
@Override
public void run() {
for (int i = 0; i < 36500; i++) {
System.out.println("你一生都開開心心的!!!");
}
System.out.println("=====> goodbye! world! <=====");
}
}

//上帝
class God implements Runnable{
@Override
public void run() {
while (true){
System.out.println("上帝守護著你");
}
}
}