黑马程序员技术交流社区

标题: 请问已下代码开启了几个线程? [打印本页]

作者: wedge    时间: 2013-7-15 10:28
标题: 请问已下代码开启了几个线程?
本帖最后由 杨兴庭 于 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()的区别是什么啊?

作者: 草貌路飞    时间: 2013-7-15 10:46
start是开启一个线程,执行的代码在run中,但它是通过创建一个线程执行的。而直接调用run方法就会调用普通对象的方法一样,只是在main线程中调用了一个方法。并没有创建线程
作者: 李江    时间: 2013-7-15 11:00
两个线程,一个main,一个是.start()开启的,.run 可以看做是调用方法。.start()是开启线程,并执行线程代码块中的内容
作者: wll_sx1990    时间: 2013-7-15 11:28
开启了两个线程,一个是main主方法线程,另一个是new Thread(){}.start()开启的线程。new Thread(){}.start()是开启了一个线程,而new Thread(){}.run()则是普通的方法调用。
作者: 木、易m    时间: 2013-7-15 11:36
只有调用start()才算启用线程,然后线程启动后则会调用run()方法里面的内容,run()方法是线程启动后调用的内容
作者: 郑才熹    时间: 2013-7-15 11:43
本帖最后由 郑才熹 于 2013-7-15 11:47 编辑

楼主可以这样添加代码:





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




作者: 诸隆隆    时间: 2013-7-15 12:21
两个吧,一个start开启一个,另一个是main主线程。  至于区别,start是开启一个线程。而直接调用run就和线程没关系了,它本身只是接口一个方法,调用的是方法。
作者: SUN_Q    时间: 2013-7-15 21:13
见到start()就是一个线程。另外加上main方法的主线程。菜鸟一个,望高手指教

作者: 杨增坤    时间: 2013-7-15 21:14
开启了两个线程  一个数主线程 一个是自定义的线程
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()的线程是自定义线程!

作者: 白_蓝(八公)    时间: 2013-7-16 10:34
这个很好理解的~其实可以从英文上面去理解它们~start是开始~run是运行~的话!!那么start就是开始线程,也就是创建一个线程之后去开始这个线程!而run运行,就像我们运行方法一样,去运行一个线程~不需要创建了!希望对你有帮助
作者: 张运恒    时间: 2013-7-16 16:55
本帖最后由 张运恒 于 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线程  两个线程

作者: 王峰230321    时间: 2013-7-16 20:35
就我看你的这段代码里。 好像只有一个主线程,  
开启多线程的两种方法、、  一种是 定义类继承Thread    第二种是覆盖Runnable接口中的run方法  。   
run加载的东西是运行方式,  也就是你想要运行的东西,
start的加载代表着一个线程的开启,  执行的东西 就是你run里的东西。  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2