public class Priorty { static class MyThread extends Thread{
private int ID=0;
public MyThread(int id){
this.ID=id;
}
public void run(){
System.out.println("MyThread-"+this.ID+" begin! Priorty: "+this.getPriority());
System.out.println("MyThread-"+this.ID+" end");
}
}
public static void main(String []args){
MyThread[] myThreads=new MyThread[3];
for(int i=0;i<3;i++){
myThreads[i]=new MyThread(i+1);
myThreads[i].setPriority(i*3+1);
}
for(int i=0;i<3;i++){
myThreads[i].start();
}
}
}启动3个线程,分别将优先级设为1,4,7.目的是先调用按优先级的高低输出,但是虚拟机的输出结果是随机的,请问用什么方法,能按规定优先级的高低调用?//运行结果:
MyThread-2 begin! Priorty: 4
MyThread-3 begin! Priorty: 7
MyThread-1 begin! Priorty: 1
MyThread-2 end
MyThread-3 end
MyThread-1 end
//--------------
MyThread-1 begin! Priorty: 1
MyThread-2 begin! Priorty: 4
MyThread-1 end
MyThread-3 begin! Priorty: 7
MyThread-3 end
MyThread-2 end
//--------------
MyThread-1 begin! Priorty: 1
MyThread-1 end
MyThread-3 begin! Priorty: 7
MyThread-3 end
MyThread-2 begin! Priorty: 4
MyThread-2 end
//--------------
MyThread-3 begin! Priorty: 7
MyThread-3 end
MyThread-2 begin! Priorty: 4
MyThread-2 end
MyThread-1 begin! Priorty: 1
MyThread-1 end

解决方案 »

  1.   

    在这段代码加一句话如何:for(int i=0;i<3;i++){
                myThreads[i].start();
                Tread.sleep(10);
            }每次启动一个线程后,当前线程休眠10毫秒,以确保它已经开始。
      

  2.   


    如果你是给我个建议我谢谢你,但是如果在对方有疑问的时候用这种方式回答你觉得合适吗?
    最起码要尊重发帖人,来CSDN的都是为了学习,碰到问题了,向大伙请教一下,一起解决,或许也是你不会或者是你没遇到的问题。
    如果你要是把所有计算机的书都看完并且精通了那你来CSDN有什么意义?难道就是为了让别人看你打那几个破字?
    -----------------------做人厚道些好!!!
                                                   以上个人观点,仅对此人回答强烈不满!
      

  3.   

    可能没问清楚目的是为了测试优先级,用不sleep方法是为了证明多个同时启动的线程,大多数情况下优先级高的先运行,完全取决于java虚拟机的调度。
      

  4.   

    OS只是保证了优先级高的线程会被优先执行..但是不是一定先执行.
    在JVM的调度算法中也是如此.
      

  5.   

    优先级只能保证在同一时抢占的线程,优先级高的先占用,
    只是这段代码运行太快了,根本就不是同一时刻的,前一个线程早运行完了~
    加了Thread.sleep()也没用
      

  6.   

    MyThread-3 begin! Priorty: 7
    MyThread-3 end
    MyThread-2 begin! Priorty: 4
    MyThread-2 end
    MyThread-1 begin! Priorty: 1
    MyThread-1 end
    我的CP上每次运行都是这个..........
      

  7.   

    5楼讲的是对的,优先级只针对争抢资源的情况。要不然有个优先级是最高的 他什么都不干,
    后面的一直等待,这样不好吧。11楼估计是cpu太差了