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

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 个回复

正序浏览
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
之前这个问题我也碰到过,呵呵,希望对你有帮助
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

查看全部评分

回复 使用道具 举报
之前这个问题我也碰到过,呵呵,希望对你有帮助
D:\日记\回答问题
回复 使用道具 举报
直接调用run()不存在多线程了,只是调用方法,同时也必须执行完run()后才能执行后面的语句
但start()就不同了,他开启了线程,默认调用run()方法

评分

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

查看全部评分

回复 使用道具 举报
Thread类中run()和start()方法的区别:
run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;
回复 使用道具 举报
调用run的话,只是调用run这个方法,还是单线程的;调用start,是开启多线程的方法,主线程和分线程都会运行
回复 使用道具 举报
直接调用 run方法是运行在原来的线程中。 调用 start 是开启新线程。新线程内部调用 run 方法, 由于 Thread 类内部 run 方法并没有代码。所以在子类中要 覆盖 run 方法。调用是在子类发起。所以会调用 子类 run 方法。要说不同就是 会不会开新线程吧。

评分

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

查看全部评分

回复 使用道具 举报
调用run是单线程
调用start是多线程
回复 使用道具 举报
调用run,只是普通的方法调用。

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

创建Runnable多线程更好用哦。

评分

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

查看全部评分

回复 使用道具 举报
run()是线程要执行的共享数据,存储在run方法里
而start是开启线程的方法。
回复 使用道具 举报
本帖最后由 曹德君 于 2013-4-26 21:21 编辑

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

评分

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

查看全部评分

回复 使用道具 举报
调用run,仅仅只是调用run这个方法。
调用start,是开启线程,并调用run方法。
回复 使用道具 举报
run方法只是调用了A类中的run方法,在不考虑垃圾回收线程的情况下。还是只有一个主线程在执行。也就是等a中的run方法执行玩了才会执行b

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

评分

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

查看全部评分

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