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

Java多线程入门案例详解:继承Thread类实现线程

 本文通过一个简单案例,讲解如何通过继承 Thread 类来实现多线程程序,并详细分析了代码结构与运行机制。


一、前言

在 Java 中,实现多线程主要有两种方式:

  • 继承 Thread

  • 实现 Runnable 接口

本文以继承 Thread 类为例,通过一个简单的例子来带大家理解线程的基本创建与启动流程。


二、示例代码

下面是本次讲解的完整代码:

package thread.test;// 定义一个继承自 Thread 类的 MyThread2 类
class MyThread2 extends Thread {// 重写 run() 方法,定义线程执行的任务@Overridepublic void run() {// 无限循环,让线程持续执行while (true) {// 打印 "hello thread"System.out.println("hello thread");// 让当前线程休眠 1 秒钟try {Thread.sleep(1000);} catch (InterruptedException e) {// 处理线程被中断的异常throw new RuntimeException(e);}}}
}public class ThreadDemo2 {public static void main(String[] args) {// 创建 MyThread2 类的实例Thread myThread2=new MyThread2();// 调用 start() 方法启动新线程myThread2.start();// 主线程中的无限循环while (true) {// 打印 "hello main"System.out.println("hello main");// 主线程也休眠 1 秒钟try {Thread.sleep(1000);} catch (InterruptedException e) {// 处理线程被中断的异常throw new RuntimeException(e);}}}}

三、代码详解

1. 定义线程类

通过继承 Thread 类,并重写 run() 方法,定义线程要执行的逻辑。

class MyThread2 extends Thread {@Overridepublic void run() {while (true) {System.out.println("hello thread");Thread.sleep(1000);}}
}
  • 通过 new 创建线程对象。

  • 调用 start() 方法来真正启动一个新线程

    • start() 方法内部会调用底层操作系统开辟新线程,并最终执行 run() 方法。

    • 如果直接调用 run(),则只是普通的方法调用,不会开启新线程!


3. 主线程与子线程并发执行

主线程本身也进入一个无限循环:

while (true) {System.out.println("hello main");Thread.sleep(1000);
}
  • 主线程也每秒打印一次 "hello main"

  • 这样,主线程和子线程各自独立运行,同时输出不同的信息。


四、程序运行结果

运行程序后,控制台将交替输出:

hello main
hello thread
hello thread
hello main
hello main
hello thread
hello main
hello thread
hello main
hello thread
hello main
hello thread
hello main
hello thread
hello main
hello thread
hello main
hello thread
^C进程已结束,退出代码为 130 (interrupted by signal 2:SIGINT)

但由于线程调度由操作系统控制,因此有时候输出顺序不一定完全规律,比如连续两次出现 "hello thread""hello main" 都是正常的。


五、注意事项

  • 线程安全:本例子中各线程互不干扰。但在实际开发中,如果多个线程操作共享资源,需要考虑线程安全问题。

  • 优雅地处理中断:在捕获 InterruptedException 后,实际项目中建议打断循环优雅退出,而不是简单地抛出异常。

  • 线程销毁:本例代码是无限循环,因此线程不会主动退出,实际开发中应该根据业务逻辑合理控制线程生命周期。


六、总结

通过继承 Thread 类,我们可以快速创建并启动一个新线程,但这种方式有一定局限性,比如:

  • Java 单继承的局限(一个类只能继承一个父类)

  • 扩展性较差

因此,在实际开发中,更推荐实现 Runnable 接口来创建线程,能够让代码更加灵活、解耦。

不过,对于初学者来说,通过继承 Thread 来理解线程基本运行原理是非常重要的一步!

相关文章:

  • mtrace和memleak源码分析
  • 从困局到破局的AI+数据分析
  • 【机器学习】​碳化硅器件剩余使用寿命稀疏数据深度学习预测
  • UE 滚动提示条材质制作
  • 民锋视角下的价格风险管理策略
  • 0805登录_注册_token_用户信息_退出-网络ajax请求2-react-仿低代码平台项目
  • 八大排序——快速排序/快排优化
  • 【javascript】竞速游戏前端优化:高频操作与并发请求的解决方案
  • jaffree 封装ffmpeg 转换视频格式,获取大小,时间,封面
  • 汤晓鸥:计算机视觉的开拓者与AI产业化的先行者
  • python数据分析(五):Pandas 数据检索技术
  • Android学习总结之Java篇(一)
  • 关于https请求丢字符串导致收到报文解密失败问题
  • java.lang.AssertionError: Binder ProxyMap has too many entries: 问题处理
  • 深入理解链表:从基础操作到高频面试题解析
  • Linux[开发工具]
  • 主流AI推理模型的详细说明、对比及总结表格
  • android录音生成wav
  • 铭记之日(3)——4.28
  • 【软件工程】需求分析详解
  • 印度一战机在巴基斯坦旁遮普省被击落,飞行员被俘
  • 毕赣新作《狂野时代》入围戛纳主竞赛单元,易烊千玺舒淇主演
  • 比尔·盖茨:未来20年通过盖茨基金会捐出几乎全部财富,2045年底基金会停止运营
  • 大四本科生已发14篇SCI论文?重庆大学:成立工作组核实
  • 高进华“控股”后首份年报出炉,史丹利账上可动资金大幅缩水
  • 蓝佛安:中方将采取更加积极有为的宏观政策,有信心实现今年5%左右增长目标