共计 974 个字符,预计需要花费 3 分钟才能阅读完成。
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() 失常返回或者因为抛出异样而提前终止都会导致相应线程处于该状态。
正文完