0

0

在Java中如何创建线程并启动执行_Java线程创建方式与执行流程解析

P粉602998670

P粉602998670

发布时间:2026-01-18 16:32:31

|

662人浏览过

|

来源于php中文网

原创

最简单线程创建方式是继承Thread类重写run()并调用start();直接调用run()不会开启新线程;一个Thread实例只能start()一次;推荐使用Runnable+Thread更灵活;需返回值或异常处理时用Callable+Future。

在java中如何创建线程并启动执行_java线程创建方式与执行流程解析

直接用 Thread 类创建并启动线程最简单

Java 中最基础的线程创建方式是继承 Thread 类,重写 run() 方法,然后调用 start() 启动。注意:不能直接调用 run(),否则只是普通方法调用,不会开启新线程。

常见错误现象:thread.run() 看似执行了,但主线程阻塞等待、CPU 时间片没切走、isAlive() 始终返回 false

  • start() 才真正触发 JVM 创建 OS 级线程,并调度执行 run()
  • 一个 Thread 实例只能 start() 一次,重复调用抛 IllegalThreadStateException
  • 子类中若需复用父类逻辑,别忘了在 run() 开头加 super.run()(虽然 Thread.run() 默认空实现)
class MyThread extends Thread {
    public void run() {
        System.out.println("线程 " + Thread.currentThread().getName() + " 正在运行");
    }
}
// 使用
MyThread t = new MyThread();
t.start(); // ✅ 正确
// t.run();   ❌ 不会新建线程

Runnable + Thread 更灵活,推荐日常使用

相比继承,实现 Runnable 接口更符合面向对象设计原则(避免单继承限制),也更适合传递任务逻辑。实际开发中绝大多数场景都走这条路。

使用场景:需要把任务逻辑和线程生命周期解耦;多个线程执行同一份任务代码;配合线程池使用(ExecutorService.submit(Runnable))。

立即学习Java免费学习笔记(深入)”;

  • Runnable 是函数式接口,可用 lambda 表达式简化:() -> System.out.println("hello")
  • 传入 Thread(Runnable) 构造器后,仍需调用 start(),不是自动执行
  • lambda 中若访问局部变量,该变量必须是 final 或“事实 final”(Java 8+)
Runnable task = () -> {
    System.out.println("任务由 " + Thread.currentThread().getName() + " 执行");
};
Thread t = new Thread(task, "worker-1");
t.start();

CallableFuture 用于需要返回值或异常处理的线程

如果线程执行完要返回结果,或可能抛出受检异常,Runnable 就不够用了——它没有返回值,且 run() 方法不能声明抛异常。

PPT.AI
PPT.AI

AI PPT制作工具

下载

这时候改用 Callable<T>:它的 call() 方法有返回值、可抛异常;再配合 Future 获取结果(支持阻塞等待、超时、取消)。

  • Future.get() 是阻塞调用,不设超时可能永久挂起,生产环境务必用 get(long, TimeUnit)
  • ExecutorService.submit(Callable) 返回 Future,而 execute(Runnable) 不返回任何东西
  • Callable 不能直接传给 Thread 构造器,必须包装成 FutureTask(它同时实现了 RunnableFuture
Callable<Integer> task = () -> {
    Thread.sleep(100);
    return 42;
};
FutureTask<Integer> ft = new FutureTask<>(task);
new Thread(ft).start();
System.out.println(ft.get()); // 阻塞直到结果就绪

线程启动失败的几个典型原因和检查点

即使代码语法正确,线程也可能“看似没执行”或“启动即死”,多数不是 Java 层问题,而是资源或状态误判。

容易被忽略的地方:

  • JVM 已接近最大线程数(-Xss 太大或系统 ulimit -u 限制过小),start()OutOfMemoryError: unable to create native thread
  • 线程 run() 方法体为空或瞬间结束,导致 isAlive() 查不到存活态,误以为没启动
  • 日志输出被缓冲(尤其 System.out),加上线程退出太快,看不到打印——加 System.out.flush() 或换 System.err 测试
  • IDE 调试时启用了“suspend on exception”,而线程内未捕获异常导致静默终止(建议在线程内加顶层 try-catch 打印堆

复杂点在于:线程的生命周期(NEW → RUNNABLE → BLOCKED/WAITING → TIMED_WAITING → TERMINATED)不是全由 Java 代码控制,OS 调度、GC 暂停、锁竞争都会影响状态观测。别依赖 isAlive() 的瞬时结果做关键判断。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

63

2025.11.27

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

63

2025.11.27

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

63

2025.11.27

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

215

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

192

2025.11.08

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.4万人学习

C# 教程
C# 教程

共94课时 | 11.3万人学习

Java 教程
Java 教程

共578课时 | 81.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号