深入解析 Java 多线程编程中的 Thread 类核心功能

Java 平台的多线程编程能力主要依赖于 Thread 这个基础类。我们将全面剖析该类的重要特性与实用方法,并通过具体案例演示其应用场景。


一、线程的初始化与基础控制

在 Java 中,开发者可以通过以下两种主要途径创建新线程:
1. #### 扩展 Thread 基类

class CustomThread extends Thread {
public void run() {
System.out.println("自定义线程执行中");
}
}
CustomThread worker = new CustomThread();
worker.start(); // 激活线程,自动执行 run()
  1. 采用 Runnable 接口(更灵活,建议优先使用)

Runnable job = () -> System.out.println("任务线程运行中");
Thread worker = new Thread(job);
worker.start();

简化写法

Thread worker = new Thread(()-> {
System.out.println("精简语法创建线程");
})

本部分重点探讨 Thread 类的核心操作方法。


二、线程终止机制:isInterrupted()interrupt()

  • interrupt():向目标线程发送终止请求信号。
  • isInterrupted():检测线程是否收到中断指令。

实例演示

Thread worker = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("持续执行任务...");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
System.out.println("接收到中断指令!");
break;
}
}
System.out.println("线程正常终止");
});
worker.start();
Thread.sleep(1500);
worker.interrupt(); // 发送中断请求

注意:interrupt() 仅发送请求,实际终止操作需要线程自身逻辑配合(如检查中断状态或处理中断异常)。

执行流程

持续执行任务...
持续执行任务...
持续执行任务...
接收到中断指令!
线程正常终止
进程已完成,返回代码 0

过程解析

1. 持续执行任务...
  • 工作线程启动,进入循环逻辑。
  • 输出信息后执行 Thread.sleep(500) 暂停。
2. 循环执行
  • 由于主线程等待 1500 毫秒,工作线程约执行 3 次循环。
3. 接收到中断指令!
  • 主线程调用 interrupt() 时,工作线程处于休眠状态。
  • sleep() 方法响应中断抛出异常。
  • 捕获异常后输出提示并退出循环。
4. 线程正常终止
  • 循环终止后执行收尾操作。
    关键说明:
    线程间的中断机制本质上是协作式的,需要被中断线程的配合才能实现安全终止。

三、线程同步等待:join() 方法

当线程 A 需要等待线程 B 完成时,可调用 join() 实现同步。

Thread worker = new Thread(() -> {
System.out.println("工作线程启动");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("工作线程完成");
});
worker.start();
worker.join(); // 当前线程暂停等待

四、获取当前线程引用:currentThread()

方法原型

@IntrinsicCandidate
public static native Thread currentThread();

此静态方法可随时获取当前执行线程的对象引用。

应用示例

Thread current = Thread.currentThread();
System.out.println("当前执行线程: " + current.getName());

输出结果

当前执行线程: main

五、线程暂停执行:sleep(long millis)

public static void sleep(long millis)

使用示例

System.out.println("开始暂停");
Thread.sleep(1000); // 线程暂停1秒
System.out.println("暂停结束");

sleep() 使当前线程暂时放弃 CPU 资源,进入休眠状态。

典型应用

  • 控制执行节奏
  • 模拟处理延迟
  • 等待条件成熟

六、线程生命周期状态(Thread.State)

Java 规范定义了六种线程状态:
状态| 说明
---|---
NEW| 已创建但未启动
RUNNABLE| 可运行状态(包含运行中和就绪)
BLOCKED| 等待获取同步锁
WAITING| 无期限等待(如 wait()join()
TIMED_WAITING| 有时限等待(如 sleep() 或带超时的 join()
TERMINATED| 线程执行结束

线程终止后对象依然存在,但不再具备执行能力。

状态转换示意图

状态图


七、核心功能总结

功能 实现方式
线程创建 继承或接口实现
线程启动 start()
线程终止 中断机制配合
线程同步 join()
获取当前线程 currentThread()
执行暂停 sleep()

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/9350.html

(0)
LomuLomu
上一篇 2025 年 5 月 13 日
下一篇 2025 年 5 月 13 日

相关推荐

  • Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

    目录 前言 集合类 ArrayList 1. 创建和初始化 ArrayList 2.添加元素 add 3.获取元素 get 4.删除元素 remove 5.检查元素 6.遍历 ArrayList LinkedList Stack 1. 创建Stack对象 2. 压入元素 (push) 3. 弹出元素 (pop) 4. 查看栈顶元素 (peek) 5. 检查栈…

    2025 年 1 月 6 日
    51200
  • WxPython跨平台开发框架之动态菜单的管理和功能权限的控制

    在一个业务管理系统中,如果我们需要实现权限控制功能,我们需要定义好对应的权限功能点,然后在前端界面中对界面元素的可用性和功能点进行绑定,这样就可以在后台动态分配权限进行动态控制了,一般来说,权限功能点是针对角色进行控制的,也就是简称RBAC(Role Based Access Control)。对于登录系统后的用户,对用户的菜单(工具栏)、界面操作按钮的权限…

    2025 年 1 月 6 日
    53000
  • Java-学生管理系统[初阶]

    让我们来探索如何使用Java语言构建一个基础的“学生信息管理系统”。这个系统将允许我们管理学生的基本信息,包括添加、删除、修改和查询学生数据。接下来,我们将分步骤实现这个系统,并在后续的文章中探讨如何为其添加模拟登录功能。 基础版学生管理系统 在深入代码之前,我们需要掌握以下Java编程基础: Java的输入输出操作 Java的分支与循环结构 Java数组的…

    未分类 2024 年 12 月 27 日
    45500
  • 使用Docker部署的基于binlog实现Mysql8

    概念 MySQL 基于 Binlog 的主从复制(Master-Slave Replication)是 MySQL 数据库中实现数据复制的一种机制。在这种复制模式下,主库(Master)记录所有对数据库的修改操作(如 INSERT、UPDATE、DELETE 等)到 二进制日志(Binlog) ,从库(Slave)则读取这些日志并执行相同的操作,从而保持与主…

    未分类 2025 年 1 月 13 日
    50300
  • 2025年蓝桥杯Java B组赛题深度剖析与解题策略

    作为一名连续两年参与蓝桥杯软件类Java B组竞赛的选手,我深刻体会到这项赛事对参赛者算法功底和临场应变能力的全面考验。今年的题目延续了蓝桥杯”夯实基础、鼓励创新”的命题风格,每道试题都像精心设计的思维迷宫,等待着选手用代码这把钥匙来开启。本文将系统梳理本届Java B组的典型赛题,通过全新的视角解析解题思路,分享编程实践中遇到的典型问题及其解决方案。这些内…

    未分类 2025 年 5 月 15 日
    41900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信