lttto 2010-03-11 01:37
浏览 255
已采纳

多线程问题,求解

我联系多线程,敲了下面的代码,为啥输出结果不一样。
package test.thread;
/**

  • @author 尉文涛
  • @date:2010-3-10上午09:58:01
    */
    public class ThreadTest1 {

    public static void main(String[] args) throws Exception {
    int i=0;
    Hello t=new Hello();
    t.start();

    while(true){
        System.out.println("Good morning"+i++);
        if(i==2&&t.isAlive()){
            System.out.println("Main waiting for Hello");
            t.join();
        }
        if(i==5) break;
    }
    

    }

}
class Hello extends Thread{
int i;
public void run(){
while(true){
System.out.println("Hello"+i++);
if(i==5) break;
}
}
}

第一次执行结果为下:Good morning0
Good morning1
Main waiting for Hello
Hello0
Hello1
Hello2
Hello3
Hello4
Good morning2
Good morning3
Good morning4
第二次执行结果为:
Hello0
Hello1
Hello2
Hello3
Hello4
Good morning0
Good morning1
Good morning2
Good morning3
Good morning4
不明白,各位帮忙说一下原因?

展开全部

  • 写回答

2条回答 默认 最新

  • 东东车 2010-03-11 03:18
    关注

    因为,有两条线程在执行,当你Hello子线程的启动的时间是由vm来分配并决定的...当你执行t.start()时,并不是马上就得到了执行...所以会有不同的输出...谢谢,分给我吧...我也有问题问的啊...
    [code]
    /**

    • @author 尉文涛
    • @date:2010-3-10上午09:58:01 */ public class ThreadTest1 {

    public static void main(String[] args) throws Exception {
    int i=0;
    Hello t=new Hello();
    t.setName("Hello Thread");
    t.start();

    while(true){
    System.out.println("Good morning"+i++);
    if(i==2&&t.isAlive()){
    System.out.println("Main waiting for Hello");
    t.join();
    }
    if(i==5) break;
    }

    }

    }
    class Hello extends Thread{
    int i;
    public void run(){
    while(true){
    System.out.println(getName()+" : Hello"+i++);
    if(i==5) break;
    }
    }
    }
    /**

    • @author 尉文涛
    • @date:2010-3-10上午09:58:01 */ public class ThreadTest1 {

    public static void main(String[] args) throws Exception {
    int i=0;
    Hello t=new Hello();
    t.setName("Hello Thread");
    t.start();

    while(true){
    System.out.println("Good morning"+i++);
    if(i==2&&t.isAlive()){
    System.out.println("Main waiting for Hello");
    t.join();
    }
    if(i==5) break;
    }

    }

    }
    class Hello extends Thread{
    int i;
    public void run(){
    while(true){
    System.out.println(getName()+" : Hello"+i++);
    if(i==5) break;
    }
    }
    }
    [/code]

    展开全部

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

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部