导读:本期聚焦于小伙伴创作的《如何通过继承 Thread 类并在 run 方法中定义线程执行逻辑》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何通过继承 Thread 类并在 run 方法中定义线程执行逻辑》有用,将其分享出去将是对创作者最好的鼓励。

在Java多线程编程中,继承Thread类是实现自定义线程执行逻辑的基础方式之一,其核心逻辑是重写Thread类提供的run方法,将线程需要完成的具体任务代码写入该方法中,再通过调用线程的start方法触发线程执行。

如何通过继承 Thread 类并在 run 方法中定义线程执行逻辑

继承Thread类实现线程的基本步骤

要通过继承Thread类定义线程执行逻辑,整体流程可以分为三步,下面逐一说明:

第一步:自定义线程类继承Thread

首先需要创建一个自定义的类,让它继承自java.lang.Thread类,这个自定义类就代表了我们自己的线程类型。

第二步:重写run方法定义执行逻辑

Thread类中已经定义了run方法的空实现,我们需要在自定义线程类中重写这个方法,把线程启动后要执行的代码全部放在run方法的方法体内。

第三步:创建线程实例并调用start方法启动

注意不能直接调用run方法来启动线程,直接调用run方法只会让代码在当前主线程中同步执行,只有调用start方法才会触发JVM创建新的线程并执行run方法中的逻辑。

完整代码示例

下面是一个简单的示例,自定义线程实现每隔1秒打印一次当前线程名称和计数,总共打印5次:

// 自定义线程类,继承Thread
class MyThread extends Thread {
    // 重写run方法,定义线程执行逻辑
    @Override
    public void run() {
        // 循环打印5次
        for (int i = 1; i <= 5; i++) {
            System.out.println("线程名称:" + Thread.currentThread().getName() + ",当前计数:" + i);
            try {
                // 线程休眠1秒,模拟任务执行耗时
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadTest {
    public static void main(String[] args) {
        // 创建自定义线程实例
        MyThread thread1 = new MyThread();
        MyThread thread2 = new MyThread();
        // 设置线程名称
        thread1.setName("自定义线程A");
        thread2.setName("自定义线程B");
        // 调用start方法启动线程,触发run方法执行
        thread1.start();
        thread2.start();
        // 主线程的执行逻辑
        for (int i = 1; i <= 3; i++) {
            System.out.println("主线程执行,计数:" + i);
        }
    }
}

关键注意事项

  • run方法是线程的执行入口,但是不能直接调用run方法启动线程,直接调用run方法不会创建新线程,只是普通的方法调用。
  • 一个Thread实例只能调用一次start方法,重复调用会抛出IllegalThreadStateException异常。
  • 如果线程需要传递参数,可以在自定义线程类中定义成员变量,通过构造方法或者setter方法传入参数,再在run方法中使用这些参数。
  • 继承Thread类的方式存在单继承的局限性,如果自定义类已经继承了其他类,就无法再继承Thread,这种情况下可以考虑实现Runnable接口的方式。

run方法和start方法的区别

很多开发者容易混淆这两个方法的作用,我们可以通过下面的对比明确二者的差异:

对比项start方法run方法
作用启动新线程,JVM会自动调用该线程的run方法定义线程的执行逻辑,是线程的执行入口
执行线程由JVM创建的新线程执行如果直接调用,由当前调用方法的线程执行
调用次数一个线程实例只能调用一次可以多次调用,但是多次调用不会启动新线程

带参数的线程自定义示例

如果线程执行逻辑需要外部传入参数,可以在自定义Thread子类中添加成员变量,示例如下:

class TaskThread extends Thread {
    // 定义成员变量接收参数
    private String taskName;
    private int loopCount;

    // 构造方法传入参数
    public TaskThread(String taskName, int loopCount) {
        this.taskName = taskName;
        this.loopCount = loopCount;
    }

    @Override
    public void run() {
        for (int i = 0; i < loopCount; i++) {
            System.out.println(taskName + " 执行第 " + (i + 1) + " 次任务");
        }
    }
}

public class ParamThreadTest {
    public static void main(String[] args) {
        TaskThread thread = new TaskThread("数据备份任务", 3);
        thread.start();
    }
}

Threadrun方法线程继承多线程线程执行逻辑修改时间:2026-06-18 14:00:43

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。