java 线程状态和转化

线程状态

java 线程状态

根据Thread类的枚举类型State,java中线程有六个状态,分别是:

  • NEW(0): 创建态,尚未启动(not yet started)的线程的线程状态,处于线程刚创建完成;
  • RUNNABLE(1): 可运行态,可运行态的线程正在jvm中执行,但是他可能正在等待操作系统的其他资源如处理器;
  • BLOCKED(2): 阻塞态,此时线程失去了或没有竞争到锁,处于阻塞态。线程可主动阻塞(主动调用Object.wait),等待拿到锁时,转成RUNNABLE态;广义地讲,线程运行后,需要等待必要的外部资源,都会变成BLOCKED态,待拿到必要的资源后才转成RUNNABLE态(如线程运行时,需要等待I/O完成,I/O期间就为BLOCKED态)
  • WAITING(3): 等待态,一个线程处于WAITING态,线程等待的时间没有上限,可能会一直等下去,当调用Object的wait,Thread.join,LockSupport.park等方法就出出现线程的等待态。更具体地讲,一个线程处理等待态是等待另外一个线程的一个具体动作,比如 一个线程执行了wait()方法后处于等待态,需要另一个线程使用notify 或notifyAll唤醒它,如在main线程中执行了一个线程的join方法,main线程处于等待态,等线程终结后,main线程才可转成RUNNABLE.
  • TIMED_WAITING(4): 定时等待态,定时等待态和等待态的区别就是定时等待态有个时间限制,等待的时间到了,该线程会继续执行,而等待态可能会一致等下去。当执行Thread 的sleep(time),wait(time) join(time)或LockSupport.parkNanos(time),LockSupport.parkUntil(time) 时[time 参数表示定时的时间],在时间没有用完时,有线程都是处于定时等待态。
  • TERMINATED(5): 终止态,线程已经完成执行完了.

java线程转化图

原文地址:https://www.cnblogs.com/ahpucd/p/13496506.html