qq50193184 2011-04-01 22:34
浏览 176
已采纳

关于java线程运行的问题

public class Test{
public static void main(String args[])throws Exception{
int i=0;
Hello h=new Hello();

    Thread t=new Thread(h);
    t.setPriority(Thread.MAX_PRIORITY);
    t.start();

    System.out.println("Please stop saying Hello and say good morning!");
    h.stopRunning();

    while(i<5){
        System.out.println("Good Morning"+i++);
    }

}
}
class Hello implements Runnable{
int i=0;
private boolean timeToQuit=false;
public void run(){
while(!timeToQuit){
System.out.println("Hello"+i++);
try{
if(i%2==0) Thread.sleep(10);
}catch(Exception e){}
}
}
public void stopRunning(){
timeToQuit=true;
}

}

我的理解是 :
hello 0
hello 1
Please stop saying Hello and say good morning
Good Morning 0
Good Morning 1
Good Morning 2
Good Morning 3
Good Morning 4

但是程序运行后先执行的是Please stop saying Hello and say good morning
为什么?优先级别我已经设置了。求解。谢谢各位

  • 写回答

2条回答 默认 最新

  • snake168 2011-04-01 23:09
    关注

    关于优先级的问题牵扯得比较远了,在这就不讨论了,你这里的问题关键在于:
    1.一个线程的启动是需要时间的,像系统资源的分配等操作。
    2.这里主线程只负责启动线程,然后它自己的时间片还没用完,就直接执行到后面的语句去了
    3.如果你分配的线程在很短很短的时间内启动了,而主线程的时间片正好又用完了,这时就会发生主线程与线程t的竞争,t优先级高点,就会先运行打印语句,不过这几率真的小得可怜~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 matlab实现基于主成分变换的图像融合。
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊