线程的六种状态

105 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

大家好,我是尚影嫣🌷,一名Java后端程序媛。如果您喜欢我的文章,欢迎点赞➕关注❤️,让我们一起成为更好的我们~

线程的六种状态

枚举类java.lang.Thread.State 中定义了六种线程的状态,可以调用线程Thread中的getState()方法获取当前线程的状态。

image.png

1. New 新建状态

线程刚被创建,start方法之前的状态,如Thread thread = new Thread();

2. Runnable 运行状态

得到时间片运行中状态,准备就绪未得到时间片的就绪状态。线程对象被创建后,其它线程调用了该对象的start()方法,来启动该线程。如thread.start()。处于就绪状态的线程随时可能被CPU调度执行。

3. Blocked 阻塞状态

阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。等线程进入就绪状态后,才有机会转为运行状态。如果遇到锁,线程就会变为阻塞状态等待另一个线程释放锁。阻塞情况分三种:

  1. 等待阻塞:通过调用线程的wait()方法,让线程等待某些工作的完成。
  2. 同步阻塞:线程获取synchronized同步锁失败时,会进入同步阻塞状态。
  3. 其他阻塞:通过调用线程的sleep()或join()方法或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

4. Waiting 等待状态

是一种无限期等待,当前线程需等待其他线程做出一些特定动作,如通知或中断。

5. Time_Waiting 超时等待状态

是一种有明确结束时间的等待状态。

6. Terminated 终止状态

当线程结束完成之后会变成此状态。线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

状态的转换

image.png