首先回顾下之前的匿名内部类:
匿名内部类的格式:
new 接口或者接口名(){
重写方法
};
本质:是该类或者接口的子类对象
匿名内部类方式使用多线程
1、new Thread(){代码…}.start();
2、new Thread(new Runnable(){代码…}).start();
例子1:继承Thread类的匿名内部类实现多线程
1 // 一、继承Thread类实现多线程 2 new Thread() { 3 // 线程的代码 4 public void run() { 5 for (int x = 0; x < 100; x++) { 6 System.out.println("Thread" + "--" + x); 7 } 8 } 9 }.start();// 别忘了启动线程
例子2:继承Runnable类的匿名内部类实现多线程
1 // 二、继承Runnable类实现多线程 2 new Thread(new Runnable() { 3 // 线程的代码 4 public void run() { 5 for (int x = 0; x < 100; x++) { 6 System.out.println("Runnable" + "--" + x); 7 } 8 } 9 10 }) 11 12 { 13 // 这里的代码为空 14 }.start();
由于继承Runnable类实现线程中,start之前的{}为空,这里在继承Thread类中是重写线程的方法的,
所以,如果两者结合起来的话,会执行Runnable还是Thread?
例子3:同时继承Runnable类和Thread类的匿名内部类来实现多线程
1 // 三、两者结合 2 3 new Thread(new Runnable() { 4 5 public void run() { 6 // 填写继承Ruannble的线程代码 7 for (int x = 0; x < 100; x++) { 8 System.out.println("hello" + "--" + x); 9 } 10 11 } 12 13 }) { 14 // 填写继承Thread类的线程代码 15 public void run() { 16 for (int x = 0; x < 100; x++) { 17 System.out.println("world" + "--" + x); 18 } 19 } 20 }.start(); 21 //通过运行结果可知道,这里只执行继承Thread类的代码
ps:这个开发中几乎看不到,就怕面试问到。。
如:上面那段代码会不会出错? 不会
执行的是Runnable的代码还是Thread类的代码? Thread类的代码