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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘士林 中级黑马   /  2012-10-30 20:41  /  1008 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

创建线程有两种方式
1、A extends Thread
2、B implements Runnable
对于第一种方式是必须重写Thread类的run方法,线程执行的是本类对象的run方法
对于第二种方式是必须重写Runnable接口的run方法,线程执行的是Runnable子类的run方法

但二者都是被start方法调用
所以猜想底层原理是不是这样呢:
class Thread
{
  private Runnable rab;
  Thread()
  {}
  Thread(Runnable rab)
  {
    this.rab = rab;
  }
   void run()
   {
      if(rab!=null)
      rab.run();//如果使用有参构造函数,则调用传进来的对象的run方法
      return; //如果使用无参构造方法,却没重写run方法时,直接返回,若重写则执行重写内容
    }
    void start()
    {
        run();//无论哪种情况,都会调用run方法
    }
}
不知对不对,请指教。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 王永荣 于 2012-10-30 21:07 编辑

我认为应该再加点东西。。
public  class Thread implements Runnable
{
  private Runnable rab;
  Thread(){}
  Thread(Runnable rab)
  {
    this.rab = rab;
  }
   public void run()
   {
      if(rab!=null)
          rab.run();//如果使用有参构造函数,则调用传进来的对象的run方法
      // return; //多余的
    }
    public synchronized void start()
    {
       //这里边应该还有些判断系统资源的代码。所以加上synchronized  
        run();//无论哪种情况,都会调用run方法
    }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

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