線程的優先級

首先CPU處理現有線程集的順序是不確定的,但是調度器將傾向於讓優先級最高的線程先執行。即線程的優先級仍然無法保障線程的執行次序,只不過,優先級高的線程獲取CPU資源的概率較大,優先級低的並非沒機會執行。

public class SimplePrioritiesDemo implements Runnable{
	private int countdown=5;
	private int priority;
	private volatile double d;
	public SimplePrioritiesDemo(int priority) {
		this.priority=priority;
	}
	public String toString() {
		return Thread.currentThread()+": "+countdown;
	}
    public void run() {
    	Thread.currentThread().setPriority(priority);
    	while(true) {
    		for(int i=1;i<100000;i++) {
    			d+=(Math.PI+Math.E)/(double)i;
    			if(i%1000==0) {
    				Thread.yield();
    			}
    		}
    		System.out.println(this);
    		if(--countdown==0) return;
    	}
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        ExecutorService exec=Executors.newCachedThreadPool();
        for(int i=0;i<5;i++) {
        	exec.execute(new SimplePrioritiesDemo(Thread.MIN_PRIORITY));
        }
        exec.execute(new SimplePrioritiesDemo(Thread.MAX_PRIORITY));
        exec.shutdown();
	}

}

通過調用Thread.currentThread()可以獲取對驅動當前任務的Thread對象的引用。
getPriority()方法可以獲取線程的優先級,setPriority()方法可以設置線程的優先級。運行以上程序發現,並沒有按我們希望的執行順序執行,從而印證了上面的話,即優先級隻影響了各線程獲得CPU的概率,而並沒有確保每個線程執行的先後順序。
volatile關鍵字介紹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章