A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 走遍世界找寻你 中级黑马   /  2013-11-26 20:34  /  1247 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 走遍世界找寻你 于 2013-11-27 08:32 编辑

public class Demo11 {
        public static void main(String[] args) {
                HaHaThread ha = new HaHaThread();
                ha.run();
                ha.start();
                System.out.println("111");
        }
}
class HaHaThread extends Thread{
        public void run(){
                System.out.println("222");
        }
}
为什么结果是222,111,222
不是222,222,111呢?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

3 个回复

倒序浏览
run是不用线程,直接执行复写的run,输出222,这是没问题的
而下面用start,start是启用之前申请号的一个线程,在这个线程已经启动的时候还没来得及输出222,下面的111就执行了,所以先见到111然后222,
如果想让线程执行完毕再执行后面的111可以在ha.start后面加上ha.join();
要抛异常

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
//写成下面的这样会是你想要的结果。建议使用循环来验证多线程的代码,才看到相互交替的执行结果,比较明显。
public class Demo11 {
         public static void main(String[] args) {
               
                 HaHaThread ha = new HaHaThread();//这是创建一个线程
                 ha.run(); //这代码还是由主线程来执行的
                 System.out.println("111");
                 //启动刚刚创建的线程,这时主线程的执行代码已经结束了,只有创建的那个线程在运行
                 ha.start();
               
         }
}
class HaHaThread extends Thread{
         public void run(){
                System.out.println("222");
         }
}

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
public static void main(String[] args) {
         HaHaThread ha = new HaHaThread();
         ha.run();
         ha.start();
         System.out.println("111");
}
}
class HaHaThread extends Thread{
public void run(){
         System.out.println("222");
}

楼主在主函数里面,其中有两个是主线程执行,一个是ha.run();,一个是System.out.println("111");

ha.start();这句话是启动多线程执行, 当然输出结果第一个是222,第二个因为刚启动多线程,还没来的急执行多线程里的内容,主线程已经把System.out.println("111");这句话给执行了,剩下多线程那个了,就让它慢慢跑了,最后只能输出222.所以结果是222 111 222
希望可以帮到楼主


评分

参与人数 1黑马币 +6 收起 理由
FFF + 6 今日加分已达到上限!请明天再努力哦!.

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马