相关文章:
通过 Thread 类的源码可知,线程有六大状态,分别是:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED,现在让我们来看看它们的具体含义
-
NEW
-
新生状态
-
线程创建后,但尚未启动
-
-
RUNNABLE
-
运行状态
-
处于运行状态的线程,可能正在执行 (Running),也有可能等待着 CPU 为其分配执行时间 (Ready)
-
-
BLOCKED
-
阻塞状态
-
在程序等待进入同步区域的时候,线程将进入阻塞状态
-
例如:当某个线程进入到 synchronized 修饰的方法或代码块后 (即该线程获取到了锁标记),其他想进入该方法或代码块的线程就只能等着,此时其他线程即处于阻塞状态
-
-
WAITING
-
无限期等待状态
-
处于无限期等待的线程,不会被分配 CPU 执行时间,需要被其他线程显示唤醒
-
调用以下方法会让线程处于无限期等待状态
-
调用了没有设置 Timeout 参数的 Object.wait() 方法
-
调用了没有设置 Timeout 参数的 Thread.join() 方法
-
调用了 LockSupport 工具类的 park() 方法
-
-
-
TIMED_WAITING
-
限期等待状态
-
处于限期等待状态的线程,在一定时间后会由系统自动唤醒
-
调用以下方法会让线程处于限期等待状态
-
调用了 Thread 类的 sleep() 方法
-
调用了设置 Timeout 参数的 Object.wait() 方法
-
调用了设置 Timeout 参数的 Thread.join() 方法
-
调用了 LockSupport 工具类的 parkNanos() 方法
-
调用了 LockSupport 工具类的 parkUntil() 方法
-
-
-
TERMINATED
-
结束状态
-
处于结束状态的线程,已经结束执行
-
在一个终止的线程上调用 start() 方法,会报 IllegalThreadStateException 异常
-