一、两种实现方式

  1. 继承 Thread 子类 自定义类继承Thread,重写run()方法,直接 new 子类调用start()启动线程。

java

运行

class MyThread extends Thread{
    @Override
    public void run(){}
}
  1. 实现 Runnable 接口 自定义类实现Runnable接口,实现run(),把实例传入Thread构造器创建线程。

java

运行

class MyTask implements Runnable{
    @Override
    public void run(){}
}
new Thread(new MyTask()).start();

二、核心区别

  1. 继承限制 Java 只支持单继承。继承Thread后,该类不能再继承其他父类;而实现Runnable不受影响,类还可以继承别的父类,扩展性更强。

  2. 数据共享 继承 Thread:每 new 一个子类都是独立对象,成员变量相互隔离,多线程很难共享数据。 实现 Runnable:多个Thread可以共用同一个 Runnable 任务对象,轻松实现成员变量共享,适合多线程并发操作同一资源(如售票案例)。

  3. 代码解耦 继承 Thread 把线程载体和业务任务耦合在一起;Runnable 只负责业务逻辑,线程由 Thread 管理,任务和线程分离,更符合面向对象设计,也适配线程池。

三、总结

日常开发优先选择实现 Runnable 接口,规避单继承限制,方便多线程共享资源,代码更灵活。

更多推荐