黑马程序员技术交流社区

标题: 多线程问题 [打印本页]

作者: 倉促、尋找你    时间: 2014-1-14 18:40
标题: 多线程问题
new Thread(new Runnable(){  //匿名
                public void run(){
                        System.out.println("runnable run");       
                }
        })
        {
                public void run(){
                        System.out.println("subthread run");
                }
        }.start();
这段代码没看明白,运行结果为什么是“subthread run”这个是怎么调用的?求大神拆分讲解下。


作者: 淡夜清风    时间: 2014-1-14 19:31

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
作者: 孤独的天奇    时间: 2014-1-14 19:58
看不明白,建议你这么用

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

new Thread(new MyRunnable()).start();




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