一、Java线程的生命周期中,存在几种状态。在Thread类里有一个枚举类型State,定义了线程的几种状态
public enum State {
  NEW,
  RUNNABLE,
  BLOCKED,
  WAITING,
  TIMED_WAITING,
  TERMINATED;
}

 二、各状态含义

  1. NEW: 线程创建之后,但是还没有启动。这时候它的状态就是NEW
  2. RUNNABLE: Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)
  3. BLOCKED: 阻塞状态,等待锁的释放,比如线程A进入了一个synchronized方法,线程B也想进入这个方法,但是这个方法的锁已经被线程A获取了,这个时候线程B就处于BLOCKED状态
  4. WAITING: 等待状态,处于等待状态的线程是由于执行了3个方法中的任意方法。
    1. Object的wait方法,并且没有使用timeout参数;
    2. Thread的join方法,没有使用timeout参数
    3. LockSupport的park方法。 处于waiting状态的线程会等待另外一个线程处理特殊的行为。
    再举个例子,如果一个线程调用了一个对象的wait方法,那么这个线程就会处于waiting状态直到另外一个线程调用这个对象的notify或者notifyAll方法后才会解除这个状态
  5. TIMED_WAITING: 有等待时间的等待状态,比如调用了以下几个方法中的任意方法,并且指定了等待时间,线程就会处于这个状态。
    1. Thread.sleep方法
    2. Object的wait方法,带有时间
    3. Thread.join方法,带有时间
    4. LockSupport的parkNanos方法,带有时间
    5. LockSupport的parkUntil方法,带有时间
  6. TERMINATED: 线程中止的状态,这个线程已经完整地执行了它的任务

 三、线程的状态图

最新文章

  1. 演示save point及自治事务的用处
  2. easy datagrid 按钮控制
  3. JS之apply,call,bind区别
  4. javascript回车完美实现tab切换功能
  5. [GIF] The Phase Property in GIF Loop Coder
  6. 在cmd中运行android.bat报出空指针异常
  7. 【数据结构】赫夫曼树的实现和模拟压缩(C++)
  8. Tomcat中的c3p0数据库连接池的释放
  9. Spring Security(六):2.3 Release Numbering
  10. MySQL复制表的方式以及原理和流程
  11. Flask启动原理,源码流程分析
  12. 1、Nginx集群tomcat
  13. ABP-JavaScript API
  14. ios中自定义button
  15. hdu5230
  16. C BIN加密
  17. 59、有用过with statement吗?它的好处是什么?
  18. 【转载】Leaflet 中文api
  19. 第八章 IO库
  20. 宿主机mount虚拟机镜像文件

热门文章

  1. Liferay7 BPM门户开发之2: BPMN 2.0 规范入门 (Activiti BPMN extensions)
  2. java中result和resultSet
  3. vue插件ele使用小坑
  4. c++之菱形继承问题
  5. Install vsftpd on centos
  6. Java8-用Lambda表达式给List集合排序
  7. WTF小程序之原生遇见mpvue
  8. SQL 日期相减(间隔)datediff函数
  9. wordpress添加文章阅读数量
  10. jsp链接orcl