线程的状态: 可以通过监控工具查看,也可以通过Thread.getState()方法查看
-
NEW 创建而未启动。由于一个线程实例只能被启动一次,因此一个线程只可能有一次处于该状态。
-
RUNNABLE :是一个复合状态,包含两个子状态
- READY:当前状态线程可被线程调度器调度使之处于RUNNING状态
- RUNNING:线程正在运行
-
BLOCLED:当一个线程发起一个阻塞式I/O操作后,或申请一个由其他线程独占的资源时,线程会处于此状态。此状态线程不会占用处理资源,当阻塞式I/O操作完成后,或线程获得了其他申请的资源,线程状态转换为RUNNABLE。
-
WAITING:一个线程执行了特定方法之后就会处于此状态如:Object.wait()、Thread.join()、LockSupport.parl(object)。
能够是waiting转为runnable的方法有:Object.notify()/notifyAll()、LockSupport.unparl(object) -
TIME_WAITING:与WAITING类似,只是带有时间,处于带有时间限制的等待状态。但其他线程没有在指定时间内执行该线程期待的特定操作,该线程的状态自动转成RUNNBLE。
-
TERMINATED(terminated):已执行结束的线程处于此状态。Thread run()正常返回或者由于抛出异常而提前终止相应线程都会导致线程处于此状态。
一个线程的整个生命周期,只能有一次处于NEW和TERMINATED状态。