黑马程序员技术交流社区

标题: 匿名Thread中的匿名Runnable [打印本页]

作者: wzg1015    时间: 2014-10-26 20:43
标题: 匿名Thread中的匿名Runnable
         以前看到有人问过,找不到了,我想问下为什么会是显示“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.     }
复制代码
             本来想当作问题来发的,没想到写着写着就解决了。突然会想起了当时看视频貌似老师也是这么解释的。不过也算了解了匿名类也是可以把参数传递进去的,而且自动调用的父类响应的构造函数调用的。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2