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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐传任 中级黑马   /  2012-9-24 23:51  /  1189 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. new Thread(
  2.                                 new Runnable(){
  3.                                         public void run() {
  4.                                                 while(true){
  5.                                                         try {
  6.                                                                 Thread.sleep(500);
  7.                                                         } catch (InterruptedException e) {
  8.                                                                 e.printStackTrace();
  9.                                                         }
  10.                                                         System.out.println("runnable :" + Thread.currentThread().getName());

  11.                                                 }                                                      
  12.                                         }
  13.                                 }
  14.                 ){
  15.                         public void run() {
  16.                                 while(true){
  17.                                         try {
  18.                                                 Thread.sleep(500);
  19.                                         } catch (InterruptedException e) {
  20.                                                 e.printStackTrace();
  21.                                         }
  22.                                         System.out.println("thread :" + Thread.currentThread().getName());

  23.                                 }      
  24.                         }
  25.                 }.start();

  26. //运行那个run()为什么?
复制代码

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
本帖最后由 谭立文 于 2012-9-25 01:05 编辑

package com.wenfengkeji.thread;
public class Demo5 extends Thread{
public Demo5(Runnable r)
{
  super(r);
}
@Override
public void run() {
  System.out.println("haha");
}
public static void main(String[] args)
{
  AA  target = new AA();
  Demo5 t = new Demo5(target);
  t.start();
new Thread(new Runnable(){
   @Override
   public void run() {
    System.out.println("a");
   }
  }){
   @Override
   public void run()
   {
    System.out.println("b");
   }
  }.start();    //这段代码的层次关系就相当于是我给你写出来的  
      
}
}
class AA implements Runnable
{
public void run()
{
  System.out.println("Runable");
}
}
Demo5继承与thread然后重写了父类的  run方法  , 然后以实现了Runnable的AA 对象为实例new了一个线程
我们看看 Thread(Ruannble r)的源代码。
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
    }
public void run() {   //这是Thread类中run方法的源代码
if (target != null) {
     target.run();
}
    }            如果   t .start() 调用的是Thread类run方法 且 target不为null则执行  实现了Runnable接口的类中的run方法,可是 Demo5对run方法进行了重写(覆盖了父类的run方法),这样就不会调用父类的
run方法 也就不会执行Runnable接口中的run方法 ,如果你将重写Thread的run方法改为super.run()就是执行实现了Runnabll接口类的 run方法中的代码体了;
new Thread(new Runnable(){
   @Override
   public void run() {
    System.out.println("a");
   }
  }){
   @Override
   public void run()
   {
    super.run();
   }
  }.start();


评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

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