我是新來的Java和threads..I的世界,通過一個示例代碼正要如下: -理解 「優先級」,在Java線程
package com.alice.learnthread;
class NewThread implements Runnable{
Thread t;
long clicker=0;
private volatile boolean running=true;
NewThread(int p){
t=new Thread(this);
t.setPriority(p);
}
public void run(){
while(running){
clicker++;
}
}
public void stop(){
running=false;
}
public void start(){
t.start();
}
}
public class TestThread {
public static void main(String[] args){
Thread r=Thread.currentThread();
r.setPriority(Thread.MAX_PRIORITY);
NewThread hi=new NewThread(Thread.NORM_PRIORITY+2);
NewThread lo=new NewThread(Thread.NORM_PRIORITY-2);
hi.start();
lo.start();
try{
r.sleep(5000);
}catch(InterruptedException e){
System.out.println("caught");
}
hi.stop();
lo.stop();
try{
hi.t.join();
lo.t.join();
}catch(InterruptedException e){
System.out.println("cau1");
}
System.out.println("hi = "+hi.clicker+" lo="+lo.clicker);
}
}
但是根據本書的輸出結果,具有高優先級的線程應該具有較高的變量答題器值。但在我的情況下,該變量唱首歌值是比更高的優先級one.The輸出就像下面我低優先級的線程要高得多: -
hi = 2198713135 lo=2484053552
這是否並不意味着低優先級的線程獲得更多的CPU時間比更高的優先級...我缺少的東西..結果是相同的(對較低的優先級線程更高的喀value聲值)在Ubuntu和WIN7 ...
2個線程每一個可能有自己的CPU內核,從來就沒有將涉及優的爭奪。我猜如果你有10個線程,你可能會看到預期的行爲。但即使如此,Java線程調度程序比搶先式更合作,所以如果沒有明確的'yield()'調用,您可能仍會得到「有趣」的結果。 –
除了上面的內容,對於你的問題的答案是「這不是說較低優先級的線程比較高優先級的線程獲得了更多的CPU時間......」是..不。 –
@鶴山那是什麼意思? – Rasmus