线程的六种状态及其生命周期

线程的六种状态及其生命周期

  • New:新建线程,未执行start方法
  • Runnable:可运行/运行中的状态
    • 正在运行
    • 运行前等待CPU分配资源
    • 已经拿到CPU资源,运行到一半,CPU资源被分配给其他线程,等待分配CPU资源
  • Blocked:进入synchronized修饰的代码块,锁(monitor)已经被其他线程拿走,线程拿不到锁。只针对synchronized
  • Waiting:没有设置timeout参数的object.wait()方法
  • Timed Waiting:计时等待
  • Terminated:已终止

线程六种状态切换图(其中 阻塞状态:BLOCKED,WAITING,TIME_WAITING)

不遵循下图的两种情况

  • Object.wait()状态被唤醒后(很大一部分情况下是获取不到锁的,因为唤醒它的线程需要持有同一把锁,唤醒它的线程完成唤醒动作后可能还没有执行完synchronzed代码块),所以当前线程先进入Blocked状态,抢到锁后再进入Runnable状态
  • 在wait期间发生异常,不用先进入Runnable,直接跳到Terminated状态
线程的六种状态及其生命周期_第1张图片
线程的六种状态

你可能感兴趣的:(线程的六种状态及其生命周期)