一个线程,从“生”到“死”经历的过程

💡 原文中文,约3500字,阅读约需9分钟。
📝

内容提要

本文讨论了线程的生命周期,包括初始状态、可运行状态、运行状态、休眠状态和终止状态。Java线程生命周期包括初始化状态、可运行/运行状态、阻塞状态、无时限等待状态、有时限等待状态和终止状态。线程状态的转换取决于不同的场景。

🎯

关键要点

  • 线程的生命周期包括初始状态、可运行状态、运行状态、休眠状态和终止状态。
  • 通用线程生命周期的初始状态表示线程已创建但未分配CPU。
  • 可运行状态表示线程可以分配CPU执行,运行状态表示线程正在执行。
  • 休眠状态是线程因调用阻塞API或等待事件而释放CPU资源。
  • 终止状态表示线程执行完毕或出现异常,生命周期结束。
  • Java线程生命周期包括初始化状态、可运行/运行状态、阻塞状态、无时限等待状态、有时限等待状态和终止状态。
  • Java中的阻塞状态、无时限等待状态和有时限等待状态在操作系统层面上都属于休眠状态。
  • RUNNABLE与BLOCKED状态的转换发生在等待synchronized隐式锁时。
  • RUNNABLE与WAITING状态的转换有三种场景,包括调用Object.wait()、Thread.join()和LockSupport.park()。
  • RUNNABLE与TIMED_WAITING状态的转换有五种场景,包括调用带超时参数的sleep()和wait()等方法。
  • 从NEW到RUNNABLE状态需要调用线程对象的start()方法。
  • 线程执行完run()方法或抛出异常后进入TERMINATED状态。
➡️

继续阅读