在操作系统中,线程的生命周期通常包括以下几个状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、终止(Terminated)。不同的操作系统或编程语言可能略有不同,但基本概念是相似的。
新建状态(New): 当线程对象被创建但还未启动时,线程处于新建状态。在 Java 中,通过创建 Thread 对象并调用 start() 方法来启动线程,使其进入就绪状态。就绪状态(Runnable): 线程进入就绪状态表示它已经准备好运行,但还没有被分配到 CPU 时间片。在就绪状态下,线程等待操作系统的调度器将其分配到可用的 CPU 资源上执行。运行状态(Running): 线程获得了 CPU 时间片并正在执行任务时,处于运行状态。在这个状态下,线程正在执行它的任务代码。阻塞状态(Blocked): 当线程在执行过程中由于某些原因(如等待 I/O 操作、获取锁、等待其他线程的通知等)暂时无法继续执行时,它会进入阻塞状态。在阻塞状态下,线程会暂停执行,释放 CPU 资源,直到满足特定条件后重新进入就绪状态。终止状态(Terminated): 线程执行完任务或者因异常而终止时,线程进入终止状态。在 Java 中,一个线程可以通过执行完 run() 方法或者抛出未捕获的异常来进入终止状态。
在这个生命周期中,线程在就绪、阻塞和运行状态之间转换,具体转换的时机取决于操作系统的调度器以及线程的执行情况。例如,在就绪状态的线程被调度到 CPU 执行时,它会进入运行状态;在执行过程中发生阻塞事件时,线程会进入阻塞状态;当阻塞事件解除时,线程又会重新进入就绪状态等待调度器的分配。
以下是停止当前线程的方法列表:
使用 Thread.currentThread().interrupt():
Thread.currentThread().interrupt();
抛出 InterruptedException:
try {// 阻塞方法Thread.sleep(1000);
} catch (InterruptedException e) {// 中断信号被捕获,执行清理工作并退出Thread.currentThread().interrupt(); // 重新设置中断状态
}
退出 run() 方法:
public void run() {while (!Thread.currentThread().isInterrupted()) {// 执行任务}// 清理工作
}
使用 Thread.stop()(已废弃):
Thread.currentThread().stop();