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í)并不明顯,路遙知馬力!