java线程的一个问题

[复制链接]
查看11 | 回复5 | 2009-2-24 17:39:11 | 显示全部楼层 |阅读模式
有关线程的一个小问题,程序如下:
class NewThread implements Runnable{

Thread t;

NewThread(){
t = new Thread(this, "Demo Thread");
System.out.println("Child thread: " + t);
t.start();
}

public void run(){
try{
for(int i = 5; i > 0; i--){



System.out.println("Child Thread: " + i);

Thread.sleep(500);
}
}catch(InterruptedException e){

System.out.println("Child interrupted.");
}

System.out.println("Exiting child thread.");
}
}
class ThreadDemo{

public static void main(String args[]){

new NewThread();

try{
for(int i = 5; i > 0; i--){



System.out.println("Main thread: " + i);

Thread.sleep(1000);
}
}catch(InterruptedException e){

System.out.println("Main thread interrupted.");
}
System.out.println("Main thread Exiting.");
}
}
我的理解前三行结果应为:
Child thread: Thread[Demo Thread,5,main]
Child Thread: 5
Main thread: 5
可是显示的结果是:
Child thread: Thread[Demo Thread,5,main]
Main thread: 5
Child Thread: 5
小弟刚研究java,希望高手指教!!!
我执行多次,其中结果第5、6行顺序会发生变化,但是上边的2、3不会(如果分优先级或者分主类、继承类的话5、6行结果也应该固定吧?)
4: Child Thread: 4
5: Child Thread: 3
6: Main thread: 4
7: Child Thread: 2

回复

使用道具 举报

千问 | 2009-2-24 17:39:11 | 显示全部楼层
以上两种结果都可能发生。线程启动后就会独立运行,具体情况要看cup的调度。我个人认为并没有一定的显示结果。...
回复

使用道具 举报

千问 | 2009-2-24 17:39:11 | 显示全部楼层
new NewThread().run(); 你没让那个子线程动起来,就是主线程睡着了。cpu也不去鸟子线程的。java多线程的运行是没固定顺序的,没有那么严格的先后顺序,还是看cpu当时的工作情况决定。多线程共享卖同1000张票的时候,可能排在后面的票还会先卖出去的。...
回复

使用道具 举报

千问 | 2009-2-24 17:39:11 | 显示全部楼层
多试几次...
回复

使用道具 举报

千问 | 2009-2-24 17:39:11 | 显示全部楼层
在这里有2个线程,一个是主线程,一个是子线程CPU执行的线程的原理是,在优先级是一样的情况下,先让子线程执行一会儿,在让主线程执行一会儿,而这个时间是极短的。其实你的理解的情况也是有可能发生的。你要是想让子线程先执行可以设置他的优先级高一些,这样CPU分给他的时间片就会多一些。例如:t.setPriority(Thread.MAX_PRIOR...
回复

使用道具 举报

千问 | 2009-2-24 17:39:11 | 显示全部楼层
理论上你的想法是对的线程的同时执行是理论上的但cpu执行任务的时候这个线程执行一小会儿另一个线在执行一小会儿, 由于cpu速度快 可以看成同时在执行,
而在执行你上面的代码 的时候cpu先分配时间给main线程执行了 所以会显示下面的结果...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行