java中線程優(yōu)先級是怎么回事給出一個(gè)例子
線程優(yōu)先級
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號: 73203。
java 中線程的優(yōu)先級用1-10之間的數(shù)字表示,數(shù)值越大優(yōu)先級越高,默認(rèn)的優(yōu)先級為5。Java中的線程優(yōu)先級是在Thread類中定義的常量 NORM_PRIORITY : 值為5,MAX_PRIORITY :值為10,MIN_PRIORITY : 值為1,缺省優(yōu)先級為 NORM_PRIORITY。有關(guān)優(yōu)先級的常用方法有兩個(gè):1)final void setPriority(int newp) : 修改線程的當(dāng)前優(yōu)先級 2)final int getPriority() : 返回線程的優(yōu)先級。馬克-to-win:線程的優(yōu)先級不能擔(dān)保線程的執(zhí)行次序。優(yōu)先級高的線程獲取CPU執(zhí)行的幾率較大,優(yōu)先級低的線程也有機(jī)會(huì)執(zhí)行。參考http://www.javamex.com/tutorials/threads/priority_what.shtml其中有句: there'd quite possibly be lower-priority threads that barely got any CPU at all, being continually starved by higher-priority threads that needed CPU. So Windows has a fallback mechanism, whereby a thread that hasn't run for a long time is given a temporary priority boost.大致意思:為防止低優(yōu)先級的線程被餓死,Windows有個(gè)抗?fàn)幍姆椒?,給低優(yōu)先級的線程一個(gè)優(yōu)先級的臨時(shí)提升。。。。。。更多的請大家參考此網(wǎng)站。
例:1.6.1-本章源碼
class ThreadMark_to_win extends Thread {
static boolean go=true;
private String s;
int i;
public ThreadMark_to_win(String s) {
this.s = s;
}
public void run() {
while(go){
System.out.println(s+" 到了 "+i++);
try {
this.sleep(1);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
}
public class Test {
public static void main(String[] args) {
Thread t1 = new ThreadMark_to_win("線程1");
Thread t2 = new ThreadMark_to_win("線程2");
t1.setPriority(1);
t2.setPriority(10);
t1.start();
t2.start();
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ThreadMark_to_win.go=false;
}
}
輸出結(jié)果:
線程1 到了 0
線程2 到了 0
線程1 到了 1
線程2 到了 1
線程2 到了 2
線程1 到了 2
線程2 到了 3
線程1 到了 3
線程2 到了 4
線程1 到了 4
線程2 到了 5
線程1 到了 5
線程2 到了 6
線程1 到了 6
。
。
。
。
。
。
。
線程1 到了 3335
線程2 到了 4753
線程2 到了 4754
線程2 到了 4755
線程2 到了 4756
線程1 到了 3336
線程2 到了 4757
線程2 到了 4758
線程2 到了 4759
后續(xù):馬克-to-win:上述程序中,boolean go=true; 被設(shè)置成靜態(tài)變量, 這樣, 它就可以被多個(gè)類或者說線程共享了,主線程睡了30秒以后,一下同時(shí)停止了兩個(gè)線程。可以看出2 比1,多跑了1000 多個(gè)數(shù), 但開始時(shí)并不明顯,路遙知馬力!