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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© thoris 中级黑马   /  2015-6-14 22:44  /  744 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. new Thread(new Runnable()
  2.                         {  
  3.                                 public void run()
  4.                                 {
  5.                                         System.out.println("runnable run");       
  6.                                 }
  7.                         })
  8.                         {
  9.                                 public void run()
  10.                                 {
  11.                                         System.out.println("subthread run");
  12.                                 }
  13.                         }.start();
复制代码


看第一眼的时候,我觉得这代码能运行么。。。结果真的能。。。
结果大家自己试试就知道。

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

14 个回复

倒序浏览
谁能解释一下这段代码
回复 使用道具 举报
这道题果然有趣,两个匿名内部类,我关心的是到底谁的方法被重写了,我觉得应该是打印下面那句话吧
回复 使用道具 举报
mishisanyi 发表于 2015-6-15 00:01
这道题果然有趣,两个匿名内部类,我关心的是到底谁的方法被重写了,我觉得应该是打印下面那句话吧 ...

果然没错,第二个run()方法复写了以一个run方法,你看看api,可以发现Thread类实际是
public class Thread extends Object implements Runnable
Thread.run() (这里不能这么写,不是static方法,但我为了看上去容易理解)
          如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
回复 使用道具 举报
是吧,你答对了吧
回复 使用道具 举报
张老师的视频里解释了原因的 建议去看下
Thread类继承了Runnable接口,覆盖run()方法,其中内容是
  1. public void run()
  2.         {
  3.                 if(target != null)
  4.                 {
  5.                         target.run();
  6.                 }
  7.         }
复制代码


这里的target是一个Runnable引用
所以假如我们重写了Thread类里的run()方法   就以我们重写的Thread类里的run()方法为执行对象
回复 使用道具 举报
这道题有意思哦   
回复 使用道具 举报
我是这样理解的,第一个run方法是接口Runnable的run方法,而第二个run是指Thread线程里面的run方法,到底执行哪个就由start启动的对象所决定。不知道这样理解对不,大家可以一起讨论一下
回复 使用道具 举报
有趣........来试试
回复 使用道具 举报
想法很奇特~
回复 使用道具 举报
本帖最后由 micro_hx 于 2015-6-15 12:02 编辑

第一个run方法是runnable里的方法,第二个run方法是Thread里自带的方法。。。。就想一个类中有自己的方法,接口中也存在同名的方法,该类再次重写了该方法后,那么调用的时候,肯定是调用类里面的方法啊。。。。二者不矛盾啊。。。
回复 使用道具 举报
mishisanyi 发表于 2015-6-15 00:09
果然没错,第二个run()方法复写了以一个run方法,你看看api,可以发现Thread类实际是
public class Threa ...

解释得不错~
回复 使用道具 举报
micro_hx 发表于 2015-6-15 11:59
第一个run方法是runnable里的方法,第二个run方法是Thread里自带的方法。。。。就想一个类中有自己的方法, ...

你这个解释也很对  总之就是Thread重写了
回复 使用道具 举报
两个匿名内部类,呵呵
回复 使用道具 举报
感觉是run()被复写了,结果是subthread run
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马