砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 首页
  • 基础

    • map循环
    • 委托
    • 泛型
    • 线程池
    • String 为什么不可变?面试必问
    • Java 异常处理最佳实践,别再乱用 try-catch
    • 为什么禁止在for循环里使用+拼接字符串
    • HashMap底层原理面试必背精简版
    • HashSet、LinkedHashSet、TreeSet 区别与使用场景
    • Java创建线程的3种方式简单易懂
    • 如何使用 jstack 排查死锁
  • Java 创建线程的 3 种方式
    • 1. 继承 Thread 类
    • 2. 实现 Runnable 接口
    • 3. 实现 Callable 接口(配合 FutureTask)
    • 总结对比

Java 创建线程的 3 种方式

1. 继承 Thread 类

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("线程运行中:" + Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        t1.start();  // 启动线程
    }
}

特点:

  • 简单直接,但 Java 是单继承,继承了 Thread 就不能再继承其他类。
  • 通过 start() 启动线程,run() 方法定义线程任务。

2. 实现 Runnable 接口

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("线程运行中:" + Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        Thread t1 = new Thread(new MyRunnable());
        t1.start();
    }
}

特点:

  • 避免了单继承的限制,可以实现多个接口。
  • 任务与线程分离,更灵活,推荐使用。

3. 实现 Callable 接口(配合 FutureTask)

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public class MyCallable implements Callable<String> {
    @Override
    public String call() throws Exception {
        return "线程返回结果:" + Thread.currentThread().getName();
    }

    public static void main(String[] args) throws Exception {
        MyCallable task = new MyCallable();
        FutureTask<String> futureTask = new FutureTask<>(task);
        Thread t1 = new Thread(futureTask);
        t1.start();
        
        // 获取线程执行后的返回结果
        String result = futureTask.get();
        System.out.println(result);
    }
}

特点:

  • 可以获取线程执行后的返回结果(通过 FutureTask)。
  • 允许抛出异常,比 Runnable 更强大。

总结对比

方式是否有返回值是否可抛出异常推荐场景
继承 Thread否否简单临时任务
实现 Runnable否否任务与线程分离,常用
实现 Callable是是需要返回结果或处理异常

提示:实际开发中更常用线程池(如 ExecutorService)来管理线程,但理解这三种基础方式对掌握并发编程非常重要。

最近更新: 2026/3/31 19:58
Contributors: kcnf
Prev
HashSet、LinkedHashSet、TreeSet 区别与使用场景
Next
如何使用 jstack 排查死锁