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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹睿翔 金牌黑马   /  2013-5-5 20:29  /  1087 人查看  /  2 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹睿翔 于 2013-5-5 20:33 编辑

    Thread是线程对象,Runnable主宿主对象。

       测试以下代码,在以下代码中,给Thread类的构造方法传递了一个Runnable实例,同时也实现了Threadrun方法,那么Thread.start()具体会执行哪一个Run方法呢?
       结果为运行Threadrun方法。
   
  1. public static void main(String[] args) throws Exception {
  2.        new Thread(new Runnable() {//给Thread的构造方法传递一个Runnable接口
  3.            public void run() {
  4.               while(true){
  5.                   try {
  6.                      Thread.sleep(1000);
  7.                   } catch (InterruptedException e) {
  8.                      e.printStackTrace();
  9.                   }
  10.                   System.err.println("Runnable的RUN方法:"+Thread.currentThread().getName());
  11.               }
  12.            }
  13.        }){
  14.            public void run() {//同时实现Thread的run方法,这段代码会运行
  15.               while(true){
  16.                   try {
  17.                      Thread.sleep(1000);
  18.                   } catch(InterruptedException e) {
  19.                      e.printStackTrace();
  20.                   }
  21.                   System.err.println("线程的RUN方法:"+Thread.currentThread().getName());
  22.               }
  23.            };
  24.        }.start();
  25.     }
复制代码
为什么会运行Thread类中的run方法呢?查看Thread类源代码的run方法如下:
public void run() {
    if (target != null) {
        target.run();
    }
}
target就是Runnable类的对象。可见,如果子类不覆盖run方法,且存在target的情况下,即会运行targetrun方法。所以,更准确的说,Runnable不是一个线程,而是一个线程执行的宿主对象。


欢迎大家讨论!!



2 个回复

倒序浏览
不用讨论了。。 这是对的。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马