线程的生命周期和状态

转载:https://blog.csdn.net/houbin0912/article/details/77969563

java线程周期经典图

  • 新建状态(new):线程对象创建后进入new,列:Thread t = new Thread();
  • 就绪状态(Runable):当调用start方法(t.start())后进入就绪状态,等待CPU调度执行
  • 运行状态(Running):CPU调度到就绪状态的线程后,开始进入到运行状态
  • 阻塞状态(Blocked):正在执行的线程由于某种原因,放弃CPU的调度,停止执行,进入就绪状态,等待CPU调度执行;根据阻塞产生的原因,阻塞状态可以分为三种:
    • 等待阻塞:运行状态中的线程执行wait()方法,是本线程进入到阻塞状态
    • 同步阻塞:线程在获取synchronized同步锁失败(因为锁被其它线程占用),会进入阻塞状态
    • 其它阻塞:通过调用线程的sleep()或发出IO请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或超时、或者IO请求处理完毕,线程进入就绪状态
  • 死亡状态(Dead):线程执行完或因为异常退出run() ,则线程生命周期结束

Java多线程的就绪、运行和死亡状态

  • 就绪状态转换为运行状态:线程得到CPU调度时;
  • 运行状态转换为就绪状态:当此线程主动调用yield()方法或运行时不再被CPU调度。
  • 运行状态转换为死亡状态:当此线程线程执行体执行完毕或发生了异常退出run()方法。
  • 此处需要特别注意的是:当调用线程的yield()方法时,线程从运行状态转换为就绪状态,但接下来CPU调度就绪状态中的哪个线程具有一定的随机性,因此,可能会出现A线程调用了yield()方法后,接下来CPU仍然调度了A线程的情况。
发布了9 篇原创文章 · 获赞 0 · 访问量 215

猜你喜欢

转载自blog.csdn.net/mlh532354163/article/details/103153494