Java线程可处于以下状态之一:
NEW
还没被启动的线程处于此种状态。
RUNNABLE
正在JVM中执行的线程处于此种状态,但这种状态的线程可能会等待操作系统的其它资源,例如处理器。
BLOCKED
由于等待监视器锁而阻塞的线程处于此种状态。处于阻塞状态的线程会等待获取监视器锁以便进入同步方法/同步块,或者在调用Object.wait方法后重新进入同步方法/同步块。
WAITING
无限期地等待另一个线程执行一个特定操作的线程处于此种状态。线程会因为调用以下方法之一而进入等待状态:
调用Object.wait()而不指定时间;
调用Thread.join()而不指定时间;
调用LockSupport.park();
例如,线程调用对象的Object.wait()方法,从而等待另一个线程调用这个对象的Object.notify()方法或Object.notifyAll()方法。调用Thread.join()方法的线程是在等待另一个特定线程终止。
TIMED_WAITING
等待另一个线程执行一个操作持续指定的时间的线程处于此种状态。线程由于调用以下方法之一并且传入等待时间而进入定时等待状态:
调用Thread.sleep();
调用Object.wait()且指定超时时间;
调用Thread.join()且指定超时时间;
调用LockSupport.parkNanos();
调用LockSupport.parkUntil();
TERMINATED
已退出的线程处于此种状态。
转载于:https://blog.51cto.com/roadlong/1197166
Java线程生命周期详解
本文详细介绍了Java线程从创建到结束所经历的各种状态,包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING及TERMINATED等状态,并解释了线程在不同状态下转换的原因。
2515

被折叠的 条评论
为什么被折叠?



