深入解析 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进阶-基于Servlet和JSP的登录功能实现

    在 Web 开发中,用户登录功能是非常常见的模块之一。本文将通过使用 Java Servlet 和 JSP 实现一个简单的用户登录功能,展示如何创建登录页面、处理用户登录请求,并使用数据库验证用户信息。还将介绍如何在 IntelliJ IDEA 中创建 Servlet 项目,引入 MySQL 连接器,并将 login.jsp 设置为项目的默认主页。 一、开发…

    2025 年 1 月 15 日
    61500
  • 什么是南北向流量和东西向流量?

    在云计算和微服务架构中,南北向流量和东西向流量是两种常见的流量模式。 南北向流量(North-South Traffic) 定义:南北向流量指的是从外部进入系统内部或从系统内部出去的流量,通常是客户端到服务器之间的通信,例如用户通过浏览器或移动应用访问 Web 服务或 API。 特点:这种流量穿过系统的边界,如从外部网络进入内部网络,或者反过来。它通常受到安…

    未分类 2024 年 12 月 31 日
    51200
  • JAVA 图形界面编程 AWT篇(1)

    前言 为了应对JAVA课设,小编走上了java的图形界面编程的道路,通过博客分享自己的学习历程,并进行笔记的记录。 AWT(Abstract Window Toolkit)介绍 AWT(抽象窗口工具包)是 Java 最早的图形用户界面(GUI)框架之一,主要用于构建桌面应用程序的图形界面。最初在 JDK 1.0 版本中作为 Java GUI 的核心库引入,旨…

    未分类 2025 年 1 月 11 日
    59500
  • Grok Super自己账号代充开通教程

    国内用户开通 Grok Super 的充值教程,整理 Grok 充值、代充、国内支付、账号 ID 获取和确认充值步骤。

    未分类 2026 年 6 月 17 日
    4700
  • SuperGrok开通会员充值完整步骤

    国内用户开通 Grok Super 的充值教程,整理 Grok 充值、代充、国内支付、账号 ID 获取和确认充值步骤。

    未分类 2026 年 6 月 5 日
    5700

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信