线程的生命周期状态

参考:Java多线程编程实战指南 核心篇

个人理解,如有不足之处,请大家指出。

在Java语言中,一个线程从其重建、启动到终止可能会经历NEW、RUNNABLE、WAITING、TIMED_WAITING、BLOCKED、TREMINATED等状态。

1.NEW

一个刚被创建但还没启动(调用该线程的start()方法)的线程就处于该状态。

2.RUNNABLE

该状态包括两个子状态:READY以及RUNNING。

READY表示该线程的start()方法已被调用,但是该线程此刻没有被线程调度器调度。

RUNNING表示该线程正在运行。

READY-->RUNNING:线程被线程调度器调度。

RUNNING-->READY:执行Thread.yield()(但该线程可能立马又被调度器调度转为RUNNING状态)、CPU时间片用完

3.WAITING

处于这种状态的线程不会被分配CPU执行时间,它们要等待被其他线程显示地唤醒。

以下方式会使线程进入这个状态:

没有设置TimeOut参数的Object.wait()方法;

没有设置TimeOut参数的Thread.join()方法;

LockSupport.park()方法;

4.TIMED_WAITING

处于这种状态的线程也不会被分配CPU执行时间,不过无需等待被其他线程显示地唤醒,在经过一定时间后它们会自动被唤醒。

以下方法会让线程进入这种状态:

Thread.sleep();

设置了TimeOut参数的Object.wait()方法;

设置了TimeOut参数的Thread.join()方法;

LockSupport.parkNanos()方法;

LockSupport.parkUntil()方法;

5.BLOCKED

一个线程发起一个阻塞式I/O操作、或者申请由其它线程独占的资源(如,锁等),都会使线程转为该状态。

6.TREMINATED(DEAD)
当Thread.run()调用结束/当前进程结束/在run()方法执行过程中抛出异常都会使该线程终止。


注:一个线程只能被启动一次,也就是说,在线程的生命周期中,只会又一次处于NEW状态。若调用两次一个thread的start()方法,会抛出“java.lang.IllegalThreadStateException”异常。

在线程的生命周期中,也只会又一次处于TREMINATED状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线程生命周期通常包括五个阶段: 1. 新建(New):当线程对象被创建后,它处于新建状态。 2. 就绪(Runnable):当调用 start() 方法后,线程进入就绪状态。就绪状态线程已经获得了除了 CPU 资源以外的所有资源,只等待获取 CPU 资源后就可以立即执行。 3. 运行(Running):当线程获得 CPU 资源后,开始执行 run() 方法,线程进入运行状态。 4. 阻塞(Blocked):当线程因为某些原因暂停执行时,进入阻塞状态。例如,线程等待某个资源的时候,如果该资源还没有准备好,线程就会进入阻塞状态。当资源就绪后,线程重新进入就绪状态,等待获取 CPU 时间片后进入运行状态。 5. 死亡(Dead):当线程完成了它的工作或者因为异常退出了 run() 方法时,线程进入死亡状态线程状态图如下: ``` ┌─────────────┐ │ New │ └─────────────┘ │ │ start() ▼ ┌─────────────┐ │ Runnable │ └─────────────┘ │ │ 获取 CPU 时间片 ▼ ┌─────────────┐ │ Running │ └─────────────┘ │ │ 阻塞或等待 ▼ ┌─────────────┐ │ Blocked │ └─────────────┘ │ │ 获得等待的资源 ▼ ┌─────────────┐ │ Runnable │ └─────────────┘ │ │ run() 方法执行完毕 ▼ ┌─────────────┐ │ Dead │ └─────────────┘ ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值