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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戎石锁 中级黑马   /  2012-8-12 21:32  /  1325 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戎石锁 于 2012-8-13 13:34 编辑

既然D.run 仅仅是对象调用方法,线程创建了,并没有运行,但当我在run() 方法里获取当前线程的名称,线程的名称却是“run线程” , 此处有一点不解。
另外继承放在上述两个地方是否有区别,运行结果是一样的,是不是只在多线程中是这种情况。

未命名12.jpg (56.41 KB, 下载次数: 10)

未命名12.jpg

未命名111111.jpg (21.57 KB, 下载次数: 12)

未命名111111.jpg

评分

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

查看全部评分

3 个回复

倒序浏览
本帖最后由 郑正华 于 2012-8-12 22:40 编辑

首先,创建线程的第一种方式,继承Thread类。
步骤:
1.定义类继承Thread。
2.覆写Thread类中的run方法。目的:将自定义代码存储在run方法中,让线程运行。
3.调用线程的start方法。该方法两个作用:启动线程调用run方法,
------------------------------------
楼主好有想法,既然继承Thread类就是为了创建线程,如果你让Demo类继承了Thread类,那还要ThreadDemo类干什么,你的原本意图就是想让ThreadDemo类创建线程,不然起这类名做甚。
换了继承,结果运行一样,是因为你的线程就没启动么。所以跟普通的类没啥区别。如果你用start()启动了线程你再看看,mian线程是不是和D线程开始并发执行了~~~但前提是你的Demo类要继承Thread类,才能用start()方法,如果Demo类没有继承Thread,它也就创建不了线程,更谈不上调用start方法了。

评分

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

查看全部评分

回复 使用道具 举报
提点建议,楼主下次请不要把代码弄成图片,直接复制代码,你弄成图片,别个想给你解答,还要去敲代码~~

public class Test
{

        /**
         * @param args
         */
        public static void main(String[] args)
        {
                // TODO Auto-generated method stub
                Demo d=new Demo();//是的,你建了个线程,但是D是不是也是类Demo的一个对象呢,你用一个对象调用了此类的方法,它是不是要执行啊,这是不是
                                 //就是我们最开讲的方法要对象来调用啊~~我理解的线程和普通类的区别:线程可以start,而普通类不可以~~
                d.run();//你这句话就是个调用方法。
                for (int x = 0; x < 60; x++)
                {
                        System.out.println("主线程"+x);
                }
        }

}

class Demo extends Thread
{
        public void run()
        {
                for (int x = 0; x < 60; x++)
                System.out.println("run线程");
                       
        }
       
}


第二个问题:

public class Test extends Thread
{

        /**
         * @param args
         */
        public static void main(String[] args)
        {
                // TODO Auto-generated method stub
                Demo d=new Demo();
                d.run();
                for (int x = 0; x < 60; x++)
                {
                        System.out.println("主线程"+x);
                }
        }

}

class Demo
{
        public void run()
        {
                for (int x = 0; x < 60; x++)
                System.out.println("run线程");
                       
        }
       
}

这样的写法不就是我们最开始的学的一个类,在主函数里创建类的对象来调用方法吗,虽然结果一样,但他们表示的去截然不同,上面的我们可以说Demo是一个线程了,可以start。而下面的,Demo就是个类,不能satart,而主函数是线程了,可以start()

评分

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

查看全部评分

回复 使用道具 举报
1定义线程!Theard 类
         * 创建线程的第一种方式;继承Thread类
         * 步骤:1:定义一个类,并继承Thread类
         * 2,复写类中的run方法;
         * 目的:将自定义代码存储在run方法,让线程运行,
         *
         * 3;调用线程的START方法;
         * 该方法两个作用,启动线程,调用run方法;
Start()开启线程并执行该线程的run方法;
* run()仅仅是对象调用方法,而线程创建了,并没有运行

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 鼓励新人,赞一个!

查看全部评分

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