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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么运行结果是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. }
复制代码

3 个回复

正序浏览
这个就是创建线程的两种方式,一个通过Thread类的子类重写run(); 另一个是通过Runnable接口的实现类重写run()方法
两种方式都属于匿名内部了表现形式。它的本质就是继承该类或者实现接口的子类匿名对象
回复 使用道具 举报
以上其实等效于:
  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();
复制代码
回复 使用道具 举报
视频中老师讲过,如果同时复写了接口中的run和Thread类中的run,会执行Thread类中的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马