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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wedge 中级黑马   /  2013-7-15 10:28  /  1962 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-15 21:18 编辑

public class Test {



      public static void main(String[] args) {



            new Thread() {



                  public void run() {



                        System.out.println(1111);

                  };

            }.start();



            new Thread() {



                  public void run() {



                        System.out.println(2222);

                  };

            }.run();



      }

}

new Thread(){}.start()和new Thread(){}.run()的区别是什么啊?

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

11 个回复

倒序浏览
start是开启一个线程,执行的代码在run中,但它是通过创建一个线程执行的。而直接调用run方法就会调用普通对象的方法一样,只是在main线程中调用了一个方法。并没有创建线程

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
两个线程,一个main,一个是.start()开启的,.run 可以看做是调用方法。.start()是开启线程,并执行线程代码块中的内容
回复 使用道具 举报
开启了两个线程,一个是main主方法线程,另一个是new Thread(){}.start()开启的线程。new Thread(){}.start()是开启了一个线程,而new Thread(){}.run()则是普通的方法调用。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
只有调用start()才算启用线程,然后线程启动后则会调用run()方法里面的内容,run()方法是线程启动后调用的内容

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 郑才熹 于 2013-7-15 11:47 编辑

楼主可以这样添加代码:





对于这个问题上面已经说的很清楚了,楼主应记住:
start是启动线程
run是线程要执行的方法



评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
两个吧,一个start开启一个,另一个是main主线程。  至于区别,start是开启一个线程。而直接调用run就和线程没关系了,它本身只是接口一个方法,调用的是方法。
回复 使用道具 举报
SUN_Q 中级黑马 2013-7-15 21:13:31
8#
见到start()就是一个线程。另外加上main方法的主线程。菜鸟一个,望高手指教
回复 使用道具 举报
开启了两个线程  一个数主线程 一个是自定义的线程
new Thread(){}.start():这个是自定义的线程
和new Thread(){}.run()这个只是调用了run()方法(只是一个普通的方法)而不是开启的线程,
public class Text {
        public static void main(String[] args) {
                new Thread() {
                        public void run() {
                                System.out.println(Thread.currentThread().getName()+"线程--1111");
                        };
                }.start();
                new Thread() {
                        public void run() {
                                System.out.println(Thread.currentThread().getName()+"线程--2222");
                        };
                }.run();
       
        System.out.println(Thread.currentThread().getName()+"线程--3333");
        }

       
}

结果:
main线程--2222
Thread-0线程--1111
main线程--3333

这样你从结果就可以看出 红颜色的是同一个线程执行的(主线程)而另一个start()的线程是自定义线程!

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
这个很好理解的~其实可以从英文上面去理解它们~start是开始~run是运行~的话!!那么start就是开始线程,也就是创建一个线程之后去开始这个线程!而run运行,就像我们运行方法一样,去运行一个线程~不需要创建了!希望对你有帮助
回复 使用道具 举报
本帖最后由 张运恒 于 2013-7-16 16:57 编辑

楼主 赶巧了 我也刚自学到这部分了 开始我也搞不懂 我吧毕业老师哪段视频看了三遍初步理解
public class Test //创建了一个Text类
        {
      public static void main(String[] args) //main主函数运行
                  {
            new Thread()
                                {
                  public void run() //复写Thread对象里的run方法
                                 {
                        System.out.println(1111);
                                };

            }.start();//start方法启动线程
            new Thread() {
                  public void run() {
                        System.out.println(2222);
                  };
            }.run();//主函数下运行Thread对象的run方法  而不是启动Thread线程他
      }
}

所以上面代码就有 主线程mian  与start方法启动的Thread线程  两个线程
回复 使用道具 举报
就我看你的这段代码里。 好像只有一个主线程,  
开启多线程的两种方法、、  一种是 定义类继承Thread    第二种是覆盖Runnable接口中的run方法  。   
run加载的东西是运行方式,  也就是你想要运行的东西,
start的加载代表着一个线程的开启,  执行的东西 就是你run里的东西。  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马