java 22 - 22 多线程之 匿名内部类的方式实现多线程

首先回顾下之前的匿名内部类:  

匿名内部类的格式:

  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类的代码