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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class A extends Thread//第一步继承类
{
        private String name;
        A(String name)
        {
        this.name=name;
       
        }
        public void run()//第二步覆盖run方法
        {
        for(int x=0;x<10;x++)
                {
       
           for(int y=0;y<10;y++)
                        {}
          
           System.out.println(name+"....x="+x);
           }

       
       
        }
}
class Java
{
        public static void main (String []args)
        {
        A a=new A("唐明雨");
        A b=new A("刘潇莹");
        a.start();//第三步start创建对象。调用start方法。也可以换成run
        b.start();
       
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

13 个回复

倒序浏览
run方法只是调用了A类中的run方法,在不考虑垃圾回收线程的情况下。还是只有一个主线程在执行。也就是等a中的run方法执行玩了才会执行b

如果用start的话就是另外开启了一个线程并且执行run方法,主线程继续向下执行,这样才能实现a和b一起执行起来

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
调用run,仅仅只是调用run这个方法。
调用start,是开启线程,并调用run方法。
回复 使用道具 举报
本帖最后由 曹德君 于 2013-4-26 21:21 编辑

为什么要覆盖run方法呢?
Thread类用于描述线程。
该类就定义了一个功能,用于存储线程要运行的代码。该存储功能就是run方法。
也就是说Thread类中的run方法,用于存储线程要运行的代码。
当你有自己特有代码需要执行多线程的时候,你就可以覆盖RUN方法来。运行自己的多线程代码。明白?
start()只是启用这个线程。至于你运行的是什么代码,就需要复写Run 方法。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
run()是线程要执行的共享数据,存储在run方法里
而start是开启线程的方法。
回复 使用道具 举报
调用run,只是普通的方法调用。

调用start,虚拟机会在底层开启多线程,并调用你覆盖的run方法。

创建Runnable多线程更好用哦。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
调用run是单线程
调用start是多线程
回复 使用道具 举报
直接调用 run方法是运行在原来的线程中。 调用 start 是开启新线程。新线程内部调用 run 方法, 由于 Thread 类内部 run 方法并没有代码。所以在子类中要 覆盖 run 方法。调用是在子类发起。所以会调用 子类 run 方法。要说不同就是 会不会开新线程吧。

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2 鼓励鼓励

查看全部评分

回复 使用道具 举报
调用run的话,只是调用run这个方法,还是单线程的;调用start,是开启多线程的方法,主线程和分线程都会运行
回复 使用道具 举报
Thread类中run()和start()方法的区别:
run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;
回复 使用道具 举报
直接调用run()不存在多线程了,只是调用方法,同时也必须执行完run()后才能执行后面的语句
但start()就不同了,他开启了线程,默认调用run()方法

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
之前这个问题我也碰到过,呵呵,希望对你有帮助
D:\日记\回答问题
回复 使用道具 举报
之前这个问题我也碰到过,呵呵,希望对你有帮助
class Java
{
        public static void main (String []args)
        {
                A a=new A("唐明雨");                                //3.创建新线程,注意,这里还没有开启哦,只是创建了哦,呵呵.
                A b=new A("刘潇莹");
                a.start();                                         //4.调用start()方法,  开启新线程,内部会自动调用 run()方法   .可以查看源代码,其中有调用 run()方法的步骤
                b.start();
               
        }
}
class A extends Thread                                        //1.定义一个继承Thread的类
{
        private String name;
        A(String name)
        {
        this.name=name;
      
        }
        public void run()                                   //2.重写run方法,并把想要运行的程序放到run()方法里去
        {
        for(int x=0;x<10;x++)
                {
      
           for(int y=0;y<10;y++)
                        {}
         
           System.out.println(name+"....x="+x);
           }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马