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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wzg1015 中级黑马   /  2014-10-26 20:43  /  1039 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

         以前看到有人问过,找不到了,我想问下为什么会是显示“Thread”
         
  1. Thread th=new Thread(new Runnable() {
  2.                         @Override
  3.                         public void run() {
  4.                                 //线程任务
  5.                                 System.out.println("Runnable");
  6.                         }
  7.                 }){
  8.                         @Override
  9.                         public void run() {
  10.                                 //线程任务
  11.                                 System.out.println("Thread");
  12.                 }};
  13.                 th.start();
复制代码
             API的说明
              public void run()
               如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。          Thread 的子类应该重写该方法。


             我开始认为是由于我新的匿名Thread类没有以Runnable为参数的构造函数,所以导致参数其实未传进去,为了验证是否传进去了
                  
  1.                 Thread th=new Thread(new Runnable() {
  2.                         public void run() {
  3.                                 System.out.println("Runnable");
  4.                         }
  5.                 }) {
  6.                         /**空**/
  7.                 };
  8.                 th.start();
复制代码
              显示正确,说明参数被正确传进去了。
               突然发现写着写着就解决。。。
               因为Runnable在Thread中只是一个成员变量,它的调用依赖于Thread默认的run方法,只要重写了run方法,target的调用有无从获得了。
  1.     public void run() {
  2.     if (target != null) {
  3.          target.run();
  4.     }
  5.     }
复制代码
             本来想当作问题来发的,没想到写着写着就解决了。突然会想起了当时看视频貌似老师也是这么解释的。不过也算了解了匿名类也是可以把参数传递进去的,而且自动调用的父类响应的构造函数调用的。

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马