曾学慬 2023-06-20 10:56 采纳率: 75%
浏览 17
已结题

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();
    }
}

```

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-06-20 11:12
    关注

    创建线程一般是这两种方式:继承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表达式指定了线程的执行体

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月28日
  • 已采纳回答 6月20日
  • 创建了问题 6月20日

悬赏问题

  • ¥25 主成分分析中的第一第二主成分分别代表哪些参数
  • ¥15 oracle数据库查询语句问题
  • ¥15 有没有c++绘制算法的佬们吗救孩一下
  • ¥15 android 蓝牙闪退
  • ¥15 绝缘子污秽comsol仿真参数
  • ¥15 Fatal error in Process MEMORY
  • ¥15 labelme生成的json有乱码?
  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时