Java 平台的多线程编程能力主要依赖于
Thread
这个基础类。我们将全面剖析该类的重要特性与实用方法,并通过具体案例演示其应用场景。
一、线程的初始化与基础控制
在 Java 中,开发者可以通过以下两种主要途径创建新线程:
1. #### 扩展 Thread
基类
class CustomThread extends Thread {
public void run() {
System.out.println("自定义线程执行中");
}
}
CustomThread worker = new CustomThread();
worker.start(); // 激活线程,自动执行 run()
-
采用
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