java线程创建的几种方式

Java创建线程有三种方式:1.继承Thread类,简单但受限于单继承;2.实现Runnable接口,解耦任务与执行者,推荐使用;3.实现Callable接口配合Future获取返回值,适用于需异步结果的场景。

Java 中创建线程主要有三种常用方式,核心区别在于是否继承/实现特定接口、代码组织方式以及扩展性。最推荐的是后两种,尤其是 实现 Runnable 接口,它更符合面向对象设计原则,也避免了单继承限制。

1. 继承 Thread 类

直接让自定义类继承 java.lang.Thread,重写 run() 方法,然后调用 start() 启动线程。

  • 简单直观,适合快速验证逻辑
  • 缺点是 Java 不支持多继承,一旦继承了 Thread,就无法再继承其他类
  • 不推荐在复杂项目中使用,耦合度高

2. 实现 Runnable 接口(最常用)

定义一个类实现 Runnable 接口,重写 run() 方法;再把该实例传给 Thread 构造器,调用 start()

  • 解耦了“任务”和“执行者”,任务逻辑可复用
  • 支持多个线程共享同一个 Runnable 实例(如处理队列任务)
  • 兼容线程池(ExecutorService 只接受 RunnableCallable

3. 实现 Callable 接口 + Future(带返回值)

CallableRunnable 类似,但它的 call() 方法可以有返回值、抛出异常;需配合 Future 获取结果,通常通过线程池执行。

  • 适用于需要获取异步执行结果的场景(比如远程调用、计算密集型任务)
  • 不能直接传给 Thread 构造器,必须通过 ExecutorService.submit()
  • Runnable 多一层封装,但功能更完整

基本上就这些。日常开发优先选 Runnable,要结果才用 Callable;继承 Thread 仅作学习或极简演示用。