当前位置: 首页 > news >正文

线程怎么创建?Java 四种方式一网打尽

🚀 Java 中线程的 4 种创建方式详解

创建方式实现方式是否推荐场景说明
1. 继承 Thread 类class MyThread extends Thread❌ 不推荐简单学习、单线程场景
2. 实现 Runnable 接口class MyRunnable implements Runnable✅ 推荐更适合多线程共享资源
3. 实现 Callable 接口class MyTask implements Callable<T>✅ 强烈推荐有返回值的任务、配合线程池使用
4. 使用线程池(Executor 框架)Executors.newFixedThreadPool(...)✅ 企业级推荐高并发、大量线程复用

🧵 方式一:继承 Thread 类

✅ 代码示例:
public class MyThread extends Thread {@Overridepublic void run() {System.out.println("线程执行中:" + Thread.currentThread().getName());}public static void main(String[] args) {new MyThread().start(); // 启动线程}
}
📌 特点:
  • 简单粗暴,但不支持多继承,因为 Java 不支持多重继承,不推荐在企业项目中使用。
  • 适合学习阶段熟悉线程生命周期。

🧵 方式二:实现 Runnable 接口(推荐)

✅ 代码示例:
public class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("Runnable线程执行:" + Thread.currentThread().getName());}public static void main(String[] args) {Thread t = new Thread(new MyRunnable());t.start();}
}
📌 特点:
  • 可以避免 Java 的单继承限制。
  • 可以实现资源共享(多线程操作同一资源)
  • 更符合面向接口编程思想,因为 Runnable 接口将任务代码和线程控制的代码解耦了,解耦性更强。

🧵 方式三:实现 Callable 接口(带返回值)

✅ 代码示例:
import java.util.concurrent.*;public class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception {return "任务结果:" + Thread.currentThread().getName();}public static void main(String[] args) throws Exception {CallableTask task = new CallableTask();FutureTask<String> futureTask = new FutureTask<>(task);Thread thread = new Thread(futureTask);thread.start();System.out.println(futureTask.get());}
}
📌 特点:
  • 支持返回结果(通过 Future 获取)。
  • 支持抛出异常。
  • 面试高频考点,线程池使用必备!

🧵 方式四:使用线程池(企业级推荐)

✅ 代码示例:
import java.util.concurrent.*;public class ThreadPoolExample {public static void main(String[] args) {ExecutorService pool = Executors.newFixedThreadPool(3);for (int i = 0; i < 5; i++) {pool.execute(() -> System.out.println("线程池执行:" + Thread.currentThread().getName()));}pool.shutdown();}
}
📌 特点:
  • 控制线程数量,避免资源浪费。
  • 提高程序性能,线程复用
  • 实际开发中广泛使用,如 Spring Boot 后台异步任务、微服务间异步通信等。

🎯 面试延伸:常见提问

Q1:Runnable 和 Callable 有什么区别?

  • Callable 有返回值,Runnable 没有;
  • Callable 可以抛出异常;
  • Callable 需要配合 FutureTask 或线程池使用。

Q2:为什么推荐线程池?

  • 避免频繁创建销毁线程,提升性能;
  • 控制并发数,防止系统崩溃;
  • 支持任务调度、延迟执行等高级特性(如 ScheduledExecutorService)。

🧵 Java 四种线程创建方式示意图(Mermaid)

在这里插入图片描述

相关文章:

  • 洛谷 B3647:【模板】Floyd 算法
  • 系统测试的技术要求
  • 404了怎么办快把路由给我断掉(React配置路由)
  • 信创时代开发工具选择指南:国产替代背景下的技术生态与实践路径
  • Ollama 是什么
  • POLARIS土壤相关数据集
  • 基于CATIA参数化管道建模的自动化插件开发实践——NX建模之管道命令的参考与移植
  • 企业级AI开发利器:Spring AI框架深度解析与实战
  • 传感器模块有助于加速嵌入式视觉开发
  • Infortrend普安存储 KS 私有云方案,构建生产线AOI光学检测数据的高速处理平台
  • OpenCv高阶(十)——光流估计
  • 第六章 进阶06 读书群第一次团建
  • 五一去荣昌吃卤鹅?基于Java和天地图的寻找荣昌卤鹅店实践
  • 【AI】[特殊字符]生产规模的向量数据库 Pinecone 使用指南
  • 京东平台关键字搜索接口开发指南:Python实现与代码详解
  • Tailwind CSS 实战:基于 Kooboo 构建企业官网页面(一)
  • 线程函数库
  • Dify依赖管理poetry切换为uv
  • C语言 函数补充
  • 【差分隐私】basic primitive的含义
  • 传染病防治法修订草案提请三审,拟加强医疗机构疾控能力建设
  • 2025年“畅游江淮 合肥等侬”文旅推介会在沪成功举办
  • 美联储报告披露关税战冲击波:消费信心下降,经济担忧加深
  • 男子称喝中药治肺结节三个月后反变大增多,自贡卫健委回应
  • 2024年度全国十大考古新发现公布,武王墩一号墓等入选
  • 宁德时代与广汽等五车企发布10款巧克力换电新车型:年内将完成30城1000站计划