黑马程序员技术交流社区

标题: 谁能分析一下这个代码啥意思呀 [打印本页]

作者: 小洋人最happy    时间: 2012-12-10 09:28
标题: 谁能分析一下这个代码啥意思呀
class ThreadTest
{
public static void main(String[] args)
{
  new Thread(new Runnable()
  {
   public void run()
   {
    System.out.println("runable run");
   }
  })
  {
   public void run()
   {
    System.out.println("subThread run");
   }
  }.start();
}
}

作者: 王中利    时间: 2012-12-10 09:53
两个;匿名内部类不是,呵呵,第一个实现Runnable接口的内部类,创建线程,第二个是封装任务的匿名内部类,开启线程。
作者: 李培根    时间: 2012-12-10 10:16
记得这个好像是视频里面的一到面试题,多线程结合匿名内部类。

class ThreadTest{
public static void main(String[] args){
  new Thread(new Runnable(){//匿名内部类作为任务
   public void run(){
    System.out.println("runnable run");
   }
  }
){
   public void run(){//Thread的子类对象。
    System.out.println("subThread run");//子类覆写了父类的run方法,运行子类。
   }
  }.start();
}

}


作者: 臧盼    时间: 2012-12-10 21:02
class ThreadTest
{
public static void main(String[] args)
{
        Test t = new Test() ;
        TestRunnable tr = new TestRunnable();
        Thread t1 = new Thread(tr) ;
        t.start() ;
    }
}
class Test extends Thread
{
        public void run()
   {
    System.out.println("subThread run");
   }
}

class TestRunnable  implements Runnable
{
        public void run()
   {
    System.out.println("runable run");
   }
}
你那个代码不还原成不是匿名内部类,就是这样子的。自己研究下吧
作者: super_Xiong    时间: 2012-12-10 22:58
这是两个匿名内部类,第一个实现的是Runnable里的run方法,第二个是重写了Thread里面的run方法
作者: 新立    时间: 2012-12-10 23:23
李培根 发表于 2012-12-10 10:16
记得这个好像是视频里面的一到面试题,多线程结合匿名内部类。

class ThreadTest{

不错,看了你的解释豁然开朗啊

作者: 洪灿阳    时间: 2012-12-10 23:24
这是传统线程的两种创建方式的合用。
即创建Thread的子类对象,并覆盖它的run()方法;
同时又实现Runnable接口,覆盖接口的run(),再创建它的对象作为Thread类的构造函数的参数进行传值。
查看Thread类的run()方法的源代码,可以看到其实这两种方法都是在调用Thread对象的run(),所以如果已经覆盖了它的run()方法,就会直接调用它的run(),-------因此运行的结果是   “subThread run”。假如没有覆盖的话,并为该Thread队形设置一个Runnbale对象,该run()会调用runnable对象的run()。所以就是这个顺序,先看自己有没有,有的就直接用自己的,没有再调用runnable()的。




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