1.Thread.State类
在Java中,Thread.State 是一个枚举类型,它定义了线程可能处于的几种状态。这些状态可以帮助开发人员更好地理解和监控线程的行为
状态 | 说明 |
---|---|
NEW (新建) | 线程被创建但尚未启动(即 start() 方法尚未被调用)。此时,线程对象已经存在,但是还没有在JVM中执行任何代码 |
RUNNABLE (可运行) | 线程正在JVM中执行,或者它可能在等待CPU资源以便执行 |
BLOCKED (阻塞) | 线程在等待一个监视器锁(通常是对象的 synchronized 块或方法)以便能够继续执行 |
WAITING (等待) | 线程在等待另一个线程执行特定的动作(注:线程在等待期间不会释放它持有的任何锁) |
TIMED_WAITING (限时等待) | 与 WAITING 状态类似,但线程等待的时间是有限的。如果等待时间结束或收到特定的动作,线程将恢复执行 |
TERMINATED (终止) | 线程已经执行完毕或因为某种原因(如异常或中断)而终止(注:线程一旦进入 TERMINATED 状态,就不能再回到其他状态) |
2.NEW (新建)
当创建一个新的Thread对象时,该线程就处于新建状态
Thread t = new Thread();
3.RUNNABLE (可运行)
可运行状态包括了“就绪”和“运行”两种状态。调用线程的start()方法,此线程进入就绪状态。当前线程sleep()方法结束,其他线程join()结束,某个线程拿到对象锁,这些线程也将进入就绪状态。当线程调度程序从可运行池中选择一个线程作为当前线程时,线程进入运行状态,此时线程占有CPU资源并在CPU上运行
4.BLOCKED (阻塞)
线程在等待获取一个锁以进入或重新进入同步代码块时,它会进入阻塞状态。当阻塞的原因消失,线程重新转入RUNNABLE (可运行)态
5.WAITING (等待)
线程进入等待状态,是因为它调用了其他线程的join()方法,或者调用了无参数的wait()方法。在这种情况下,线程会等待另一个线程的操作完成或者等待notify()/notifyAll()消息
6.TIMED_WAITING (限时等待)
线程进入定时等待状态,是因为它调用了sleep()或者带有指定时间的wait()或join()方法。在指定的时间过去之后,线程会自动返回RUNNABLE状态
7.TERMINATED (终止)
(1)当线程执行完毕,即线程执行完所有的代码后,线程会自动终止
(2)调用stop()方法(但该方法已经被废弃)
(3)调用线程的interrupt()方法,线程可以通过检查中断标志位来决定是否终止执行
(4)自定义一个中断标志位,并在外部进行修改。这个标志位需要用volatile进行修饰
(5)当线程中抛出未捕获的异常时,线程会终止执行