黑马程序员技术交流社区

标题: 多线程里关于匿名内部类的一个问题 [打印本页]

作者: momoxixi    时间: 2015-12-23 19:53
标题: 多线程里关于匿名内部类的一个问题
为什么运行结果是2不是1?
  1. public class Test {
  2.     public static void main(String[] args) {

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

作者: Hi.。    时间: 2015-12-23 20:01
视频中老师讲过,如果同时复写了接口中的run和Thread类中的run,会执行Thread类中的
作者: momoxixi    时间: 2015-12-23 20:03
以上其实等效于:
  1. new Thread() {
  2.             @Override
  3.             public void run() {
  4.                 System.out.println("2");
  5.             }
  6.         }.start();
复制代码

请问这里Thread对象是属于匿名类吗?或者说以下这两种有什么区别?
  1. new Thread() {
  2.             @Override
  3.             public void run() {
  4.                 System.out.println("2");
  5.             }
  6.         }.start();

  7.         new Thread(new Runnable() {
  8.             @Override
  9.             public void run() {
  10.                 System.out.println("1");
  11.             }
  12.         }).start();
复制代码

作者: Hi.。    时间: 2015-12-23 20:18
这个就是创建线程的两种方式,一个通过Thread类的子类重写run(); 另一个是通过Runnable接口的实现类重写run()方法
两种方式都属于匿名内部了表现形式。它的本质就是继承该类或者实现接口的子类匿名对象




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