线程的状态转换
任务在线程中执行,线程可以是以下五种状态之一:新建、就绪、运行、阻塞、结束。
- 新建一个线程时,它就进入新建状态(New)。调用线程的start()方法启动线程后,它就进入就绪状态(Ready)。就绪状态是可运行的,但可能还没有开始运行。操作系统必须为它分配CPU时间。
- 就绪线程开始运行时,它就进入运行状态(Running)。如果给定的CPU时间用完或调用线程的yield()方法,处于运行状态的线程就可能进入就绪状态。
- 有几种原因可能使线程进入阻塞状态(Blocked)(既非活动状态)。可能是它自己调用了join()、sleep()或wait()方法,也可能是其它线程调用了这些方法。它可能是在等待I/O操作的完成。当阻塞行为不起阻塞作用时,阻塞线程可能被重新激活。例如,如果线程处于休眠状态并且休眠时间已满,线程就会被重新激活并进入就绪状态。
- 最后,如果一个线程执行完它的run()方法,这个线程就被结束(Finished)。
- isAlive()方法是用来判断线程状态的方法。如果线程处于就绪、阻塞或者运行状态,则返回true,如果线程处于新建并且没有启动的状态,或者已经结束,则返回false。
[Java语言程序设计 进阶篇 原书第8版 29.16]