我想问一下这个多线程中.优先级高的线程是不是一定比优先级低的线程先运行呢
我刚在main里面实例两个线程 一个把优先级设置到9,一个是默认
结果发现优先级高的还没循环完毕.而优先级低的就在运行了得到了w:320 w:321 m:8 w:322这样的
那优先级是不是只是让优先级高的获得更多的资源只是一个概率问题而不是绝对先运行优先级高的呢?
代码:
private  int  count;
   public void run(){
for(int i=0;i<1000;i++)
{
count=count+1;
System.out.print(Thread.currentThread().getName()+":"+count);
}
try {
sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}public static void main(String[] args) {
                thred th=new thred();
  th.setName("w");
th.setPriority(9);
thred t=new thred();
t.setName("m");
th.start();
t.start();
}

解决方案 »

  1.   

    额,cpu时间片轮转算法会让优先级的线程获得更多的时间片,但优先级低的也不是完全没有机会运行,所以每次运行的结果都不一样,就像你说的这是一个概率问题,个人认为是这样。
      

  2.   

    这东西并不能保证什么,不同平台不同jvm的表现都可能不同
      

  3.   

    举个例子:某jvm采用native线程,可是OS的线程优先级只有3级,那么jvm在映射优先级的时候可能将某个区间的java线程优先级映射到同一个native线程优先级上又如,某jvm线程采用green model,其做法就太自由了