什么是线程?线程有哪几种主要状态?
时间: 2025-01-20 17:25:42 浏览: 49
### 线程概念
线程,即轻量级进程(LWP: Light Weight Process),是程序执行流的最小单元。一个线程是一个进程内的顺序执行流。同一类别的多个线程共享一块内存空间和一组系统资源,而每个线程拥有自己的堆栈用于程序执行时的数据存储。由于线程间的切换开销较小,因此被称作轻负荷进程。在一个进程中可以存在多个线程来并发处理不同的任务[^2]。
### Java线程的主要状态及其描述
#### 1. 新建 (NEW)
当线程对象被创建后,但尚未启动之前处于新建状态。此时该线程还没有开始运行任何操作,在调用`start()`方法前一直保持这种状态[^1]。
#### 2. 可运行 (RUNNABLE)
一旦调用了线程实例上的`start()`方法,线程就进入了可运行状态。这意味着JVM现在可以在适当的时候安排此线程去执行其体内的逻辑;然而,“可运行”并不意味着它当前正在CPU上实际执行——也可能是因为调度原因暂时未被执行。在这个状态下,线程可能正忙于计算或是等待I/O操作完成等事件的发生[^3]。
#### 3. 阻塞 (BLOCKED)
如果某个线程试图获取已被另一个活动中的线程占用的对象监视器锁(例如通过`synchronized`关键字保护的方法或代码块),那么这个请求失败并将使原尝试加锁的那个线程进入阻塞状态直到目标锁变得可用为止。一旦获得了所需的锁定条件满足,线程就会返回到之前的可运行状态继续前进。
#### 4. 等待 (WAITING)
当线程显式地调用了诸如`Object.wait()`, `Thread.join()` 或者`LockSupport.park()`这样的API之后会陷入无限期休眠并转入等待状态。除非接收到特定的通知信号唤醒它们,否则这些线程将一直处于停滞不前的状态中。比如对于`wait()`来说就是需要其他线程调用同一个对象上的`notify()/notifyAll()`方法来进行激活。
#### 5. 超时期等待 (TIMED_WAITING)
这是指那些设置了固定时限暂停下来的线程所处的一种特殊形式下的等待状况。典型的情况包括但不限于:
- 使用带参数版本的`Thread.sleep(long millis)`函数指定毫秒数作为延迟间隔;
- 带有超时选项的各种`wait(timeout)`,`join(timeout)` 和`parkNanos/timeUnit` API调用。
经过设定好的时间段过后即使没有任何外部干预也会自动苏醒过来转回至可运行队列里排队等候进一步指令[^4]。
#### 6. 终止 (TERMINATED)
无论正常结束还是因发生错误异常提前退出,只要完成了自身的使命或者无法再向前推进下去了,线程最终都将步入终止阶段不再参与后续的任务分配与执行过程之中。
```java
// 示例:展示如何创建并启动一个新的线程
public class Example {
public static void main(String[] args){
Thread thread = new Thread(() -> System.out.println("这是一个新线程"));
thread.start(); // 启动线程使其从 NEW 进入 RUNNABLE 状态
}
}
```
阅读全文
相关推荐
















