Open Source, Open Mind,
Open Sight, Open Future!

线程五个状态
- 新建状态(NEW),当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值。
- 就绪状态(RUNNABLE),当对象待用了
start()
方法之后,该线程就处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行。
- 运行状态(RUNNING),如果处于就绪状态的线程获得了CPU,开始执行
run()
方法的线程执行体,则该线程处于运行状态。
- 阻塞状态(BLOCKED),阻塞状态是指线程因为某种原因放弃了CPU使用权,也即让出了CPU timeslice,暂时停止运行。知道线程进入可运行(runnable)状态,才有机会再次获得CPU timeslice转到运行状态。
阻塞状态主要分三种:
- 等待阻塞(o.wait-->等待队列):运行的线程执行o.wait()方法,JVM会把该线程放入等待队列中
- 同步阻塞(lock-->锁池):运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。
- 其他阻塞(sleep/join):运行的线程执行Thread.sleep()或join()方法,或者发出了IO请求时,JVM会把该线程置为阻塞状态,当以上完毕,线程重新转入可运行状态
- 线程死亡
当线程执行完毕、或者异常、会是调用stop()线程都会进入消亡状态。(注:不推荐使用stop结束线程,容易造成死锁)
