我是 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);
}
}
然而,根据书中的输出,具有高优先级的线程应该对变量 clicker 具有更高的值。但在我的情况下,较低优先级线程的变量 clicker 的值比较高优先级线程的值高得多。输出对我来说如下所示:-
hi = 2198713135 lo=2484053552
这是否意味着较低优先级的线程比较高优先级的线程获得更多的 CPU 时间......我错过了什么......在 ubuntu 和 win7 上的结果是相同的(较低优先级线程的更高点击器值)......