副本第二关:线程的生命周期及五种基本状态

159 阅读1分钟
  1. 新建。
    • new()即可进入新建状态;
  2. 就绪。
    • 新建 -> 就绪,通过线程的start()方法;
  3. 运行。
    • 就绪 -> 运行,等待CPU调度执行,当CPU调度处于就绪的线程时,线程才进入运行状态;运行 -> 就绪,通过线程的yield()方法;
  4. 阻塞。阻塞又分为普通阻塞、同步阻塞、等待阻塞。
    • 运行 -> 普通阻塞,通过线程的sleep()或者join()方法;运行 -> 同步阻塞,通过synchronized关键字;运行 -> 等待阻塞,通过Object类的wait()方法。
    • 普通阻塞 -> 就绪,通过sleep()结束、join()结束、I/O完成;同步阻塞 -> 就绪,通过获取到锁资源;等待阻塞 -> 就绪,通过notify()或者notifyAll()去唤醒等待线程,然后去争夺锁资源,拿到锁资源后,进入就绪状态;
  5. 死亡。
    • 运行 -> 死亡,线程执行完或者因异常退出了run()方法,该线程结束生命周期。

注意:只有就绪状态和运行状态才会占用CPU时间片,其他都会让出CPU时间片。