线程的生命周期:创建-->就绪-->运行-->阻塞-->死亡
线程的状态:
- 新建状态(New):新创建了一个线程对象
- 就绪状态(Runable):其它线程调用了该线程的start方法。该状态的线程都在可运行线程池中,等待获取CPU使用权
- 运行状态(Running):就绪状态的线程获取到了CPU使用权,开始执行程序代码
- 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进行就绪状态,才有机会转到运行状态继续运行
阻塞的情况又分为三种:
* 等待阻塞:运行的线程调用object类的wait方法,该线程会释放占用的所有资源,JVM会把该线程放到“等待池”中。进入这个状态后,是不能自动唤醒的,必须依靠其它线程调用notify或notifyAll方法才能被唤醒。
* 同步阻塞:运行的线程在获取对象的同步锁时,若该锁正在被其它线程占用,则JVM会将该线程放入“锁池”中。
* 其它阻塞:运行的线程调用Thread类的sleep方法或发出I/O请求时,JVM会把该线程置为阻塞状态。当sleep状态超时或I/O处理完毕时,线程重新转入就绪状态。 - 死亡状态(Dead):线程执行完毕或因异常退出了run方法,该线程结束生命周期。