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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangjinyu501 中级黑马   /  2013-4-8 12:08  /  1965 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.debug.java;

public class ThreadDemo extends Thread{

        private String threadName;
       
        public ThreadDemo(String threadName) {
                this.threadName = threadName;
        }

        public ThreadDemo() {

        }

        /*
         * 重写run方法
         */
        @Override
        public void run() {
                super.run();
                System.out.println(Thread.currentThread().getName());
        }

        /**
         * @param args
         */
        public static void main(String[] args) {
                System.out.println("main线程:"+Thread.currentThread().getName());
                Thread thread1=new Thread("构造方法创建线程名");
                ThreadDemo thread2=new ThreadDemo();
                thread1.start();
                thread2.start();
        }

}
输出是:main线程:main
            Thread-0
我想问一下,为什么Thread类的Runnable方法没有输出呢?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

5 个回复

倒序浏览
为什么Thread类的Run方法没有输出呢?
  1. public void run() {
  2.                 super.run();//这个位置调用Thread类的run方法
  3.                 /*
  4.                   java(API 文档):
  5.                 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;
  6.                  否则,该方法不执行任何操作并返回。
  7.                 说白了,Thread中的run方法的方法体不执行任何语句.
  8.                */
  9.                 System.out.println(Thread.currentThread().getName());
  10.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
Thread类中的run方法本身并不包含输出,如下。
        public void run() {
                // TODO Auto-generated method stub
                super.run();
        }
你重写的run方法属于ThreadDemo类下的run方法,并未修改原Thread类的run方法,所以
继承Thread类的ThreadDemo通过重写的run方法输出内容,而通过Thread类new出的对象依然调用原run方法,即啥都不打印。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
就好比构造函数,他里面根本没有什么输出语句,怎存在输出呢?
回复 使用道具 举报
为什么Thread类的Runnable方法没有输出呢?Runnable是个接口,不是方法,你想说的super();调用了父类Runnable中的run方法,为什么Runnable中的run()方法没有执行吧,因为Runnable是个接口,方法没有具体实现。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
Runnable接口中的所有方法都是抽象方法,没有方法实现,所以即便你用super语句调用了他的run()方法,因为该方法没有任何方法体,所以根本不会有任何反应

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

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