从我在Java中花在线程上的时间开始,我找到了这两种编写线程的方法:

implements 100:

public class MyRunnable implements Runnable {
    public void run() {
        //Code
    }
}
//Started with a "new Thread(new MyRunnable()).start()" call

或者,用extends 100:

public class MyThread extends Thread {
    public MyThread() {
        super("MyThread");
    }
    public void run() {
        //Code
    }
}
//Started with a "new MyThread().start()" call

这两段代码有什么显著区别吗?

推荐答案

是的:IMO,implements Runnable是首选的方法.你并没有真正专门研究线程的行为.你只是在给它一些东西让它跑.这意味着compositionphilosophically"更纯净"的方式.

practical个术语中,这意味着你可以实现Runnable个,也可以从另一个类扩展...从Java8开始,您还可以通过lambda表达式实现Runnable.

Java相关问答推荐

Cosmos Change Feed Process Lag远远超过收集中的记录数量

是否需要关闭Executors返回的执行器.newVirtualThreadPerTaskExecutor()?

Java中不同包中的类之间的配置共享

为什么Java的代码工作(if condition内部的实例)

Java FX中的河内之塔游戏-在游戏完全解决之前什么都不会显示

如何修复IndexOutOfBoundsException在ClerView适配器的onRowMoved函数?

在运行MVN测试时,为什么构建失败,并显示了java.lang.ClassNotFoundException:java.net.http.HttpResponse?

呈现文本和四舍五入矩形时出现的JavaFX窗格白色瑕疵

为什么Java Annotation接口覆盖对象类中的方法

Java:使用Class.cast()将对象转换为原始数组

如何使用值中包含与号的查询参数创建一个java.net.URI

从ActiveMQ Classic迁移到ActiveMQ Artemis需要进行哪些客户端更改?

在学习Spring时,通过构造函数参数0表达了不满意的依赖关系

Cordova Android Gradle内部版本组件不兼容

将stringBuilder + forloop转换为stream + map

基于Java中mm/dd/yy格式的最近日期对数组列表进行排序

Cucumber java-maven-示例表-未定义一步

Bash数组的单引号元素并使用空格连接

java.lang.ClassCastException:com.google.firebase.FirebaseException无法转换为com.google.fire base.auth.FirebaseAuthException

Java中计算大n和k值模10^9+7的二项式系数的乘法公式输出错误值