在操作系統中,線程可以劃分優先級,優先級高的線程得到的CPU資源較多,也就是CPU優先執行優先級較高的線程對象中的任務。
設置線程優先級有助於幫助“線程規劃器”確定在下一次選擇哪一個線程來優先執行。
設置線程優先級使用setPriority()方法,此方法在JDK的源碼如下:
public final void setPriority(int newPriority) {
ThreadGroup g;
checkAccess();
if (newPriority > MAX_PRIORITY || newPriority < MIN_PRIORITY) {
throw new IllegalArgumentException();
}
if((g = getThreadGroup()) != null) {
if (newPriority > g.getMaxPriority()) {
newPriority = g.getMaxPriority();
}
setPriority0(priority = newPriority);
}
}
在Java中,線程的優先級分爲1~10這10個等級,如果小於1或大於10,則JDK拋出異常throw new IllegalArgumentException()。
JDK中使用3個常量來預置定義優先級的值,代碼如下:
public final static int MIN_PRIORITY=1;
public final static int NORM_PRIORITY=5;
public final static int MAX_PRIORITY=10;
線程優先級具有三個特性:
- 繼承性:在Java中,線程的優先級具有繼承性,比如A線程啓動B線程,則B線程的優先級與A是一樣的。
- 規則性:CPU儘量將執行資源讓給優先級比較高的線程。
- 隨機性:優先級較高的線程不一定每一次都先執行完。
總結:線程具有優先級,可以通過setPriority()方法設置線程的優先級,優先級具有繼承性,即線程的優先級總是和啓動該線程的線程的優先級保持一致;優先級具有規則性,即CPU儘量將執行資源讓給優先級比較高的線程;優先級具有隨機性,即優先級較高的線程不一定每一次都先執行完。