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
为什么?优先级别我已经设置了。求解。谢谢各位
关于优先级的问题牵扯得比较远了,在这就不讨论了,你这里的问题关键在于:
1.一个线程的启动是需要时间的,像系统资源的分配等操作。
2.这里主线程只负责启动线程,然后它自己的时间片还没用完,就直接执行到后面的语句去了
3.如果你分配的线程在很短很短的时间内启动了,而主线程的时间片正好又用完了,这时就会发生主线程与线程t的竞争,t优先级高点,就会先运行打印语句,不过这几率真的小得可怜~
楼上说的没错,你的输出hello的语句是在线程中,但是线程启动了以后主线程并没有停止运行!继续执行所以你的System.out.println("Please stop saying Hello and say good morning!");
在你的线程内部循环判断之前先一步执行完了…… :oops: