线程的生命周期

线程的生命周期

当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。 在线程的生命周期中,它要经过

新建(New):使用new关键字创建了一个线程之后,该线程就处于新建状态

就绪(Runnable):当线程对象调用了start()方法之后,该线程处于就绪状态

运行(Running):如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态

阻塞 (Blocked):

  等待阻塞(o.wait->等待队列):运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue) 中

  同步阻塞(lock -> 锁池):运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线 程放入锁池(lock pool)中

  其他阻塞(sleep/ join):运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时, JVM会把该线程置为阻塞状态.

死亡(Dead):

  正常结束:run()或call()方法执行完成,线程正常结束。 

  异常结束:线程抛出一个未捕获的Exception或Error。 

  调用stop:直接调用该线程的stop()方法来结束该线程—该方法通常容易导致死锁

5种状态。尤其是当线程启动以后,它不可能一直"霸占"着CPU独自 运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换