1、新生状态
用上一篇创建线程的方式创建线程对象后,该线程对象就处于新生状态,处于新生状态的线程拥有自己的内存空间,通过调用start方法后进入就绪状态。
2、就绪状态
处于就绪状态的线程已经具备了运行的条件,但是还没有分配到CPU,处于线程就绪队列等待系统为其分配CPU。当系统选定一个线程对象为其分配CPU之后,此线程就会进入运行状态,系统挑选线程的动作称为CPU调度。一旦获得CPU,线程就会进入运行状态并自动调用自己的run方法。
3、运行状态
处于运行状态的线程会执行自己的run方法,直到系统调用其他方法而终止,或等待某资源而进入阻塞状态,或执行完程序进入消亡状态。
4、阻塞状态
处于运行状态的线程,在某些情况下,如执行了sleep()方法,或等待I/O设备等资源,将让出CPU,并暂停自己的运行进入阻塞状态。当引起阻塞的原因消除时:比如睡眠时间到,或等待的I/O设备空闲下来,线程便进入就绪状态,进入就绪队列等待CPU,得到CPU后从原来暂停的地方继续开始执行。
5、消亡状态
此状态为线程生命周期的最后一个阶段,线程消亡的状态有两个:1、线程执行完所有工作,自然消亡。2、被强制性的终止。
二、状态切换如下图所示:
三、使运行的线程进入阻塞的方法:
1、sleep()方法: 使当前线程进入睡眠,让出CPU。
2、join()方法: 等待调用此方法的线程运行直至消亡后其他线程才能运行。
3、yeild()方法: 暂停调用此方法的线程,让出CPU