java thread类可以不用继承直接用吗

线程的实现方式一般是继承thread类或者实现runnable接口,最近在看Android watchdog的时候发现它是一个线程,但是并没有extends Thread,编译是能过的,并且这是Android framework的源码,肯定是没有问题的,但是不理解,想请教下各位专家为什么可以这样写,我参照的是Android S的源码,代码位置frameworks\base\services\core\java\com\android\server\Watchdog.java


```java

public class Watchdog {
    static final String TAG = "Watchdog";
    ......

    private static Watchdog sWatchdog;

    private final Thread mThread;

    ......

    private Watchdog() {
        mThread = new Thread(this::run, "watchdog");

    }
    public void start() {
        mThread.start();
    }
}

```

创建线程一般是这两种方式:继承Thread类和实现Runnable接口

代码中,Watchdog类也没有直接继承Thread类或实现Runnable接口,它也可以创建线程
是因为在Watchdog类的构造函数中,通过new Thread(this::run, "watchdog")创建了一个新的Thread对象,并将一个lambda表达式this::run作为线程的执行体

Java 8以后,引入了lambda,它写接口或函数式接口跟简洁。然后this::run表示使用Watchdog类中的run方法作为线程的执行体。

所以,就算Watchdog类没有直接继承Thread类或实现Runnable接口,但它也能创建一个线程,并在构造函数中通过lambda表达式指定了线程的执行体

当然可以直接使用了, 这相当于 新建了一个类,内部成员变量为一个线程对象, 把线程对象封闭在你的先建的 Watchdog 类,线程对象的行为,由Watchdog 类管理