系列文章:线程共有6种状态;在某一时刻只能是这6种状态之一。这些状态由 Thread.State 这个枚举类型表示,并且可以通过 getState() 方法获得当前具体的状态类型。 NEW Thread myThread=new MyThread("myThread"); MyThread 实例化之后但还没有执行 start(),这时线程的状态是 NEW。 RUNNABLE 可运行的线程状态。 Thread myThread=new MyThread("myThread"); myThread.start(); 当方法被调用 start() 之后,线程就处于 RUNNABLE 状态。但它不一定正在运行,是否运行是由 JAVA 的运行系统来协调决定的。 BLOCKED 受阻塞并且正在等待监视器锁的某一线程的线程状态。 下列情况会进入阻塞状态: 1. 等待某个操作的返回,例如 IO 操作,该操作返回之前,线程不会继续下面的代码。 一个被阻塞的线程在下列情况下会被重新激活: 1. 执行了 sleep() 方法,睡眠时间已到。 WAITING 某一等待线程的线程状态。 线程因为调用了 Object.wait() 或 Thread.join() 而未运行,就会进入 WAITING 状态。 TIMED_WAITING 具有指定等待时间的某一等待线程的线程状态。 线程因为调用了 Thread.sleep(),或者加上超时值来调用 Object.wait() 或 Thread.join() 而未运行,则会进入 TIMED_WAITING 状态。 TERMINATED 已终止线程的线程状态。 自然终止:正常运行 run() 方法后终止。 异常终止:调用 stop() 方法后终止。 为了简便我们可以把 BLOCKED、WAITING、TIMED_WAITING、TERMINATED 归为一个状态:BLOCKED 那各个状态之间的相互转换如下图所示: 转载请并标注: “本文转载自 linkedkeeper.com ” ©著作权归作者所有 |