Java线程的状态能够应用监控工具查看,也能够通过Thread.getState()调用获取。Thread.getState()的返回值类型是一个枚举类型(Enum)。Thread.State所定义的线程状态包含以下几种。

  • NEW:一个已创立未启动的线程处于该状态。因为一个线程实例只可能被启动一次,因而,一个线程只可能有一次处于该状态。
  • RUNNABLE:该状态能够被看成一个复合状态。它包含两个子状态:READY和RUNNING。前者示意处于该状态的线程能够被线程调度器(Scheduler)进行调度而使之处于RUNNING状态。后者示意处于该状态的线程正在运行,即相应线程对象的run办法所对应的指令正在由处理器执行。执行Thread.yield()的线程,其状态可能会由RUNNING状态转换为READY。处于READY子状态的线程也被称为沉闷线程。
  • BLOCKED:一个线程发动一个阻塞式I/O(Blocking I/O)操作后,或者申请一个由其余线程持有的独占资源(比方锁)时,相应的线程会处于该状态。处于BLOCKED状态的线程并不会占用处理器资源。当阻塞式I/O操作实现后,或者该线程取得了其申请的资源,该线程的状态又能够转换成RUNNABLE。
  • WAITING:一个线程执行了某些特定办法后就会处于这种期待其余线程执行另外一些特定操作的状态。可能使其执行线程变更为WAITING状态的办法包含:Object.wait()、Thread.join()和LockSupport.park(Object)。可能使相应线程从WAITING变更为RUNNABLE的相应办法包含:Object.notify()/notifyAll()和LockSupport.unpark(Object)。
  • TIMED_WAITING:该状态和WAITING状态相似,差异在于处于该状态的线程并非无限度地期待其余线程执行特定操作,而是处于带有工夫限度的期待状态。当其余线程没有在指定工夫内执行该线程所冀望的特定操作时,该线程的状态主动转换为RUNNABLE。
  • TIERMINATED:曾经执行完结的线程处于该状态。因为一个线程实例只可能被启动一次,因而一个线程也只可能有一次处于该状态。Thread.run()失常返回或者因为抛出异样而提前终止都会导致相应线程处于该状态。