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状态。

  • 相关阅读:
    charindex代替like并非"更快更全面"
    SQLServer2005中的几个统计技巧
    SQLServer获取Excel中所有Sheet
    SQLServer2005的查询独占模拟
    SSAS事实表和维度表数据类型必须一致
    monodevelop 出现has line endings which differ from the policy settings.的解决方法
    mono for android Main.axml
    vs2010 错误提示框:文件加载 使用 简体中文(GB2312
    在Virtual Machine上运行Hello China的方法和工具
    embed基本语法
  • 原文地址:https://www.cnblogs.com/mr-ziyoung/p/13589314.html
Copyright © 2011-2022 走看看