java後臺進程和線程優先級


 1. 後臺線程:處於後臺運行,任務是爲其餘線程提供服務。也稱爲「守護線程」或「精靈線程」。JVM的垃圾回收就是典型的後臺線程。
特色:若全部的前臺線程都死亡,後臺線程自動死亡。
設置後臺線程:Thread對象setDaemon(true);
setDaemon(true)必須在start()調用前。不然出現IllegalThreadStateException異常;
前臺線程建立的線程默認是前臺線程;
判斷是不是後臺線程:使用Thread對象的isDaemon()方法;
spa

而且當且僅當建立線程是後臺線程時,新線程纔是後臺線程。線程

例子:對象



class Daemon  implements Runnable{


public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("Daemon -->" + i);
}
}

}


public class DaemonDemo {
public static void main(String[] args) {
/*Thread cThread = Thread.currentThread();
System.out.println(cThread.isAlive());

//cThread.setDaemon(true);
System.out.println(cThread.isDaemon());*/

Thread t = new Thread(new Daemon());

System.out.println(t.isDaemon());
for (int i = 0; i < 10; i++) {

System.out.println("main--" + i);
if(i == 5){
t.setDaemon(true);
t.start();
}
}
}
}
get



2,線程的優先級:it

每一個線程都有優先級,優先級的高低只和線程得到執行機會的次數多少有關。
並不是線程優先級越高的就必定先執行,哪一個線程的先運行取決於CPU的調度;
默認狀況下main線程具備普通的優先級,而它建立的線程也具備普通優先級。
Thread對象的setPriority(int x)和getPriority()來設置和得到優先級。
MAX_PRIORITY :值是10
MIN_PRIORITY :值是1
NORM_PRIORITY :值是5(主方法默認優先級)
io


注意:每一個線程默認的優先級都與建立他的父線程的優先級相同,在在默認的狀況下,class

main線程具備普通優先級,由main線程建立的子線程也具備普通優先級後臺


例子:垃圾回收



class Priority implements Runnable{


public void run() {

for (int i = 0; i < 200; i++) {
System.out.println("Priority-- " + i);
}
}

}

public class PriorityDemo {
public static void main(String[] args) {

/**
* 線程的優先級在[1,10]之間
*/
Thread.currentThread().setPriority(3);
System.out.println("main= " + Thread.currentThread().getPriority());
/*
*  public final static int MIN_PRIORITY = 1;
*  public final static int NORM_PRIORITY = 5;
*  public final static int MAX_PRIORITY = 10;
* */
System.out.println(Thread.MAX_PRIORITY);

//===============================================

Thread t = new Thread(new Priority());
for (int i = 0; i < 200; i++) {
System.out.println("main" + i);
if(i == 50){
t.start();
t.setPriority(10);
}
System.out.println("-------------------------"+t.getPriority());
}
}
}
方法

相關文章
相關標籤/搜索