持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
大家好,我是尚影嫣🌷,一名Java后端程序媛。如果您喜欢我的文章,欢迎点赞➕关注❤️,让我们一起成为更好的我们~
线程的六种状态
枚举类java.lang.Thread.State 中定义了六种线程的状态,可以调用线程Thread中的getState()方法获取当前线程的状态。
1. New 新建状态
线程刚被创建,start方法之前的状态,如Thread thread = new Thread();
2. Runnable 运行状态
得到时间片运行中状态,准备就绪未得到时间片的就绪状态。线程对象被创建后,其它线程调用了该对象的start()方法,来启动该线程。如thread.start()。处于就绪状态的线程随时可能被CPU调度执行。
3. Blocked 阻塞状态
阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。等线程进入就绪状态后,才有机会转为运行状态。如果遇到锁,线程就会变为阻塞状态等待另一个线程释放锁。阻塞情况分三种:
- 等待阻塞:通过调用线程的wait()方法,让线程等待某些工作的完成。
- 同步阻塞:线程获取synchronized同步锁失败时,会进入同步阻塞状态。
- 其他阻塞:通过调用线程的sleep()或join()方法或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
4. Waiting 等待状态
是一种无限期等待,当前线程需等待其他线程做出一些特定动作,如通知或中断。
5. Time_Waiting 超时等待状态
是一种有明确结束时间的等待状态。
6. Terminated 终止状态
当线程结束完成之后会变成此状态。线程执行完了或者因异常退出了run()方法,该线程结束生命周期。