线程状态与生命周期
们之间的转化关系。新建状态使用new关键字和Thread类或其子类建立一个线
程对象后,该线程对象就处于新建状态。它将保持这个状态直到程序start()这个线程。就绪状态当线程对象调用了s
tart()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM线程调度器的调度。运行状
态如果就绪状态的线程获取了CPU资源,就可以执行run(),此时线程便处于运行状态。处于运行状态的线程最为复杂
,它可以变为阻塞状态、就绪状态和死亡状态。阻塞状态如果一个线程执行了sleep(睡眠)、suspend(挂起)
等方法,就会暂时释放占用的CPU资源,该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得CPU资源后,其可以
重新进入就绪状态。阻塞状态又可以分为以下3种:(1)等待阻塞。运行状态中的线程执行wait()方法,使线程进入
等待阻塞状态。(2)同步阻塞。程序获取synchronized同步锁失败(因为同步锁被其他线程占用)。(3)其
他阻塞。当通过调用线程的sleep()或join()发出I/O请求时,线程就会进入阻塞状态。当sleep()状
态超时、join()等待线程终止或超时或者I/O处理完毕,线程重新转入就绪状态。死亡状态当一个处于运行状态的线
程完成任务或者其他终止条件发生时,该线程就切换到终止状态。一个线程从创建开始,通过调用不同的方法实现线程状态之
间的转化,实现了对进程的控制和调度,从而完成在线程run()方法中定义实现的业务逻辑操作。