zoukankan      html  css  js  c++  java
  • java并发编程系列基础篇--线程的状态

    前言

    多线程的编程中,要想熟练的运用线程来完成某些任务,那么就需要了解线程的运行状态以及在必要的时候合理的对线程进行中断,这样才能够达到提高程序的执行效率。

    线程的状态

    线程的状态可以从Thread类的源码中看出,它包括六种状态:新建状态(NEW)、可运行状态(RUNNABLE)、阻塞状态(BLOCKED)、等待状态(WAITING)、有限等待状态(TIMED_WAITING)、终止状态(TERMINATED)。
    下面我们来看一下,线程这几种状态的转化。
    线程状态转换
    新建状态--当线程被new Thread()的时候,当前线程就会处于一个NEW的状态。
    可运行状态--当线程调用了start()方法后,当前线程就处于RUNNABLE状态,等待CPU分配时间片来执行当前线程的run方法。一旦被分配了时间片,它就会真正的执行线程任务,也就是图中的RUNNING状态(这个状态只是为了表明当前线程来执行,实际的Thread类中没有此状态,当线程在运行时,它的状态是RUNNABEL)。
    阻塞状态--当线程1与其他线程在争夺锁资源时没有抢到锁,那么线程1就会处于一个BLOCKED状态。
    等待状态--当线程调用了Thread.join()方法或者LockSupport.park()方法,当前线程就会处于WAITING状态;如果当前线程争抢到了锁,调用了wait()方法,那么线程也会处于WAITING状态,并且释放当前锁。
    有限等待状态--当线程调用了sleep(100)方法(<font color="#dd0000"它不会使线程释放掉锁)、Object.wait(100)、LockSupport.parkNanos(10)带有具体等待时间的方法时,线程会处于TIMED-WAITING状态。
    终止状态--当线程任务执行完毕、main方法执行完毕或者异常退出,则线程状态变为TERMINATED状态。

  • 相关阅读:
    【vue】饿了么项目-goods商品列表页开发
    【vue】饿了么项目-header组件开发
    转转hybrid app web静态资源离线系统实践
    从列表到详情,没你想的那么简单
    浅谈Async/Await
    小程序代码包压缩 策略&方案
    微信小程序使用场景延伸:扫码登录、扫码支付
    这一次带你彻底了解Cookie
    常见函数错误引发的思考.
    触碰密码世界的大门
  • 原文地址:https://www.cnblogs.com/mr-ziyoung/p/13589314.html
Copyright © 2011-2022 走看看