线程的生命周期是?线程有几种状态?
1.线程的五种状态是:创建状态、就绪状态、运行状态、阻塞状态和死亡状态
-
新建状态(new):就是使用new方法创建新线程对象,线程进入新建状态,例如:Thread thread=new Thread();
-
就绪状态(Runnable):就绪状态也称为可执行状态,线程对象在被创建后可通过调用start(),从而启动该线程进入就绪状态,该状态的线程,随时可被CPU调度执行。
-
运行状态(Running):线程获得CPU的资源调度可以执行,线程只能通过就绪状态进入到运行状态,run()定义线程的运行操作。
-
阻塞状态(Blocked):在运行状态下,因为某些原因线程放弃CPU的执行权,暂时或者停止执行,进入阻塞状态.比如调用sleep()、wait()、suspend()、join()等方法后线程就进入了阻塞状态,该状态下的线程可以通过线程休眠时间结束sleept()或者调用notify()、notifyAll()、interrupt()后线程再次回到就绪状态
-
销毁状态(Dead):线程因为执行完任务或者调用stop()、又或者异常终止而退出run(),该线程结束了生命周期
阻塞又分为三种:
- 等待阻塞:运行的线程执行wait(),该线程会释放占用的所有资源,JVM会把该线程放入到”线程池“中,进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或者notifyAll()才能被唤醒,wait()是Object类的方法
- 同步阻塞:运行的线程在获取对象的同时锁时,若该同步锁被别的线程占用,则JVM会把线程仿若锁池中。
- 其他阻塞:运行的线程执行sleep()或者join(),或者发出了I\O请求时,JVM会把该线程设置为阻塞状态,当sleep状态超时时,或者I/O处理完毕时,线程重新转入就绪状态,sleep()时Thread类的方法。