线程状态与线程方法详解
- 人工智能
- 2025-09-18 12:18:02

目录
1. 线程状态介绍
1.1 NEW(新建状态)
1.2 RUNNABLE(可运行状态)
1.3 BLOCKED(阻塞状态)
1.4 WAITING(等待状态)
1.5 TIMED_WAITING(超时等待状态)
1.6 TERMINATED(终止状态)
2. 线程状态转换图
3. 线程常用方法
3.1 线程启动与运行
3.2 线程休眠
3.3 线程等待与唤醒
3.4 线程加入
3.5 线程中断
3.6 线程优先级
3.7 线程礼让
3.8 线程终止
4. 总结
1. 线程状态介绍
在 Java 中,线程的生命周期可以分为多种状态。这些状态定义在 java.lang.Thread.State 枚举类中,具体包括以下六种状态:
1.1 NEW(新建状态)线程被创建但尚未启动。
此时线程对象已经存在,但还没有调用 start() 方法。
1.2 RUNNABLE(可运行状态)线程正在 JVM 中执行,或者等待操作系统资源(如 CPU 时间片)。
调用 start() 方法后,线程进入 RUNNABLE 状态。
1.3 BLOCKED(阻塞状态)线程因为等待锁而进入阻塞状态。
例如,当线程试图获取一个被其他线程持有的锁时,它会进入 BLOCKED 状态。
1.4 WAITING(等待状态)线程无限期地等待其他线程的显式唤醒。
调用以下方法会使线程进入 WAITING 状态:
Object.wait()
Thread.join()
LockSupport.park()
1.5 TIMED_WAITING(超时等待状态)线程在指定的时间内等待其他线程的唤醒。
调用以下方法会使线程进入 TIMED_WAITING 状态:
Thread.sleep(long millis)
Object.wait(long timeout)
Thread.join(long millis)
LockSupport.parkNanos(long nanos)
LockSupport.parkUntil(long deadline)
1.6 TERMINATED(终止状态)线程执行完毕或异常退出。
线程的 run() 方法执行完成后,线程进入 TERMINATED 状态。
2. 线程状态转换图
以下是线程状态之间的转换关系:
NEW → RUNNABLE → BLOCKED → RUNNABLE → TERMINATED ↓ WAITING ↓ TIMED_WAITING
3. 线程常用方法Java 提供了许多方法来操作和控制线程的行为。以下是常用的线程方法及其作用:
3.1 线程启动与运行start()
启动线程,使线程进入 RUNNABLE 状态。
只能调用一次,重复调用会抛出 IllegalThreadStateException。
run()
线程的实际执行逻辑。
直接调用 run() 不会启动新线程,而是在当前线程中执行。
3.2 线程休眠sleep(long millis)
使当前线程休眠指定的毫秒数。
线程进入 TIMED_WAITING 状态。
休眠期间不会释放锁。
try { Thread.sleep(1000); // 休眠 1 秒 } catch (InterruptedException e) { e.printStackTrace(); } 3.3 线程等待与唤醒wait()
使当前线程进入 WAITING 状态,并释放锁。
需要其他线程调用 notify() 或 notifyAll() 来唤醒。
notify()
随机唤醒一个等待该锁的线程。
notifyAll()
唤醒所有等待该锁的线程。
synchronized (lock) { lock.wait(); // 当前线程等待 lock.notify(); // 唤醒一个等待线程 } 3.4 线程加入join()
等待目标线程执行完毕。
当前线程进入 WAITING 状态,直到目标线程终止。
join(long millis)
等待目标线程执行完毕,但最多等待指定的毫秒数。
Thread thread = new Thread(() -> { System.out.println("子线程运行"); }); thread.start(); thread.join(); // 主线程等待子线程结束 System.out.println("主线程继续执行"); 3.5 线程中断interrupt()
中断目标线程。
如果线程处于 WAITING 或 TIMED_WAITING 状态,会抛出 InterruptedException。
isInterrupted()
判断线程是否被中断。
static interrupted()
判断当前线程是否被中断,并清除中断状态。
Thread thread = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { System.out.println("线程运行中"); } System.out.println("线程被中断"); }); thread.start(); thread.interrupt(); // 中断线程 3.6 线程优先级setPriority(int priority)
设置线程的优先级(1~10)。
优先级越高,线程获得 CPU 时间片的概率越大。
getPriority()
获取线程的优先级。
Thread thread = new Thread(() -> System.out.println("线程运行")); thread.setPriority(Thread.MAX_PRIORITY); // 设置最高优先级 thread.start(); 3.7 线程礼让yield()
提示调度器当前线程愿意让出 CPU。
线程从 RUNNABLE 状态回到就绪状态,让其他线程有机会运行。
Thread.yield(); // 当前线程礼让 3.8 线程终止stop()(已废弃)
强制终止线程,不推荐使用,因为它可能导致资源未释放。
推荐方式:
使用标志位或 interrupt() 方法来安全地终止线程。
class MyThread extends Thread { private volatile boolean running = true; @Override public void run() { while (running) { System.out.println("线程运行中"); } } public void stopThread() { running = false; } } MyThread thread = new MyThread(); thread.start(); thread.stopThread(); // 安全终止线程 4. 总结线程的状态和方法是多线程编程的核心内容。通过理解线程的状态转换和掌握常用的线程方法,可以更好地控制线程的行为,编写出高效、稳定的多线程程序。
线程状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。
常用方法:start()、sleep()、wait()、notify()、join()、interrupt() 等。
线程状态与线程方法详解由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“线程状态与线程方法详解”
下一篇
三支一扶入职体检不合格项目全解析