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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 倉促、尋找你 中级黑马   /  2014-1-14 18:40  /  1085 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

new Thread(new Runnable(){  //匿名
                public void run(){
                        System.out.println("runnable run");       
                }
        })
        {
                public void run(){
                        System.out.println("subthread run");
                }
        }.start();
这段代码没看明白,运行结果为什么是“subthread run”这个是怎么调用的?求大神拆分讲解下。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 淡定

查看全部评分

2 个回复

倒序浏览

new Thread(xxxx)
        {
             //覆盖了Thread类的run方法
                public void run(){
                        System.out.println("subthread run");
                }
        }.start();


xxxx就是
new Runnable(){  //匿名
               //覆盖了Runnable接口的run方法
                public void run(){
                        System.out.println("runnable run");        
                }
        }
这样能看懂了么?
new Thread(xxxx)... 也是匿名内部类。

因为你的Thread匿名内部类覆盖了Thread类的run方法,所以不会去调用Runnable匿名内部类的run方法,所以输出subthread run。如果不覆盖Thread类的run方法,就会输出runnable run

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1 希望 你把问题回答的更好,回答问题的思路.

查看全部评分

回复 使用道具 举报
看不明白,建议你这么用

class MyRunnable implements Runnable
{
      public void run()
      {
          System.out.println("runnable run");        
      }
}

new Thread(new MyRunnable()).start();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马