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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我能驾驭住 中级黑马   /  2012-6-8 18:16  /  1486 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package Thread.lianxi;

import com.sun.org.apache.bcel.internal.generic.D2F;

class Demo extends Thread{
        @Override
        public void run() {
                // TODO Auto-generated method stub
                for (int i = 0; i < 3; i++) {
                        System.out.println("two");
                }
        }
}


public class ThreadDemo1 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
               
                Demo d1=new Demo();
                Demo d2=new Demo();
                d1.start();
            d2.start();
            //d1.run();//它仅仅是一个调用对象而已,只是建立线程,没有运行?是什么意思?
            //d2.run();
         for (int i = 0; i < 3; i++) {
                System.out.println("one");
        }

        }

}


它仅仅是一个调用对象而已,只是建立线程,没有运行?是什么意思?

6 个回复

倒序浏览
你dome类里面的run方法是值覆盖了Thread类中的run   d1.run();  你只是通过Demo的实力对象去调用了这个run方法。
而你要启动线程是需要start()的.
回复 使用道具 举报
正如你看到的run方法中没有开启线程的代码;只有运行的代码;所以真正的是为线程做准备的是start;他会为开启线程做一个前期的准备;比如建立对象,准备资源的;
在start中会调用run方法;run中只是代码没有其他的东西;所以如你所说的;
回复 使用道具 举报
package Thread.lianxi;
//一个程序至少有一个线程存在

class Demo extends Thread {

        private String name;

        public Demo(String name) {

                //this.name = name;//这两个结果为什么不一样呢??
                super(name);
        }

        @Override
        public void run() {
                // TODO Auto-generated method stub
                for (int i = 0; i < 3; i++) {
                        // System.out.println(this.getName()+"run");
                        System.out.println(Thread.currentThread().getName() + "....run");
                        // 线程的默认名称,是Thread-0,Thread-1.........排序的,通过getName()方法获取;
                        // currentThread()获取当前线程对象,是静态的,用类名调用!格式:Thread.currentThread()
                }

        }
}

public class ThreadDemo1 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub

                Demo d1 = new Demo("one");//两个线程 交叉运行
                Demo d2 = new Demo("two");//
                d1.start();// 开启线程,执行run()方法;
                d2.start();
                // d1.run();//它仅仅是一个调用对象而已,只是建立线程,没有运行?是什么意思?
                // d2.run();
                for (int i = 0; i < 3; i++) {
                        System.out.println("....main");
                }

        }

}
回复 使用道具 举报
//this.name = name;//这两个结果为什么不一样呢??
                super(name);
System.out.println(Thread.currentThread().getName() + "....run");
                        // 线程的默认名称,是Thread-0,Thread-1.........排序的,通过getName()方法获取;
                        // currentThread()获取当前线程对象,是静态的,用类名调用!格式:Thread.currentThread()
回复 使用道具 举报
d1.run()---它不是一个调用对象,而是对象在调用它自己的run方法而已,你在前面创建对象就是创建了线程,但是调用run方法并不会启动线程,这就是run方法和start方法的区别:调用start方法相当于是启动线程并调用run方法,而调用run方法就只是当普通方法调用而已。
回复 使用道具 举报
线程是控制进程执行的基本单元.     
1,通过Tread类可以创建一个线程,并且可以启动运行,
2,一个线程所要运行的内容是写在run()方法里面的, (创建一个线程想要用它来做什么事情)
3, Demo d=new Demo();  d.run(); 这个是普通地创建了一个Demo对象,并且调用了run方法  它是属于主线程里面的东东,并没有启动另一个线程
4,d.start()是启用线程,只有调用start()这个方法线程才能运行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马