基础回顾-线程的几种状态

线程作为一个程序最基本的组成部分,在Java中存在好几种状态

  1. NEW: 一个刚创建出来的线程处于该状态下,由于只有刚刚被创建的时候可能处于该状态,所以该状态只能被存在一次
  2. RUNNABLE: 复合状态,包含READY和RUNNING
    • READY:该状态的线程可以被JVM的线程调度器进行调度让处于RUNNING状态
    • RUNNING:表示处于该状态的线程正在运行
      调用方法举例:
    • Thread.yield()调用会将对应线程从RUNNING->READY
  3. BLOCKED: 一个线程发起一个阻塞I/O操作后,或者试图去获得一个由其他线程持有锁时候,相对应的线程会处于该状态,处于该状态的线程不会占用CPU资源
  4. WAITING:一个线程执行了某些方法调用之后就会处于这种无限等待的状态
    • 调用方法使得线程变更WAITING方法:
      • Object.wait()
      • Thread.join()
      • LockSupport.park()
    • 将WAITING方法变成RUNNABLE:
      • Object.notify()
      • Object.notifyAll()
      • LockSupport.unpark(thread)
  5. TIMED_WAITING:和WAITING类似,有限时间的等待
  6. TERMINATED: 已经执行结束的线程处于该状态。
原文地址:https://www.cnblogs.com/lonecloud/p/13720822.html