在线程的生命周期中,有七种不同的状态,这些状态描述了线程在不同阶段的情况。Java中线程的七大状态如下:
-
新建(New): 当创建一个线程对象时,线程就处于新建状态。此时,线程已经被创建,但尚未开始执行。
-
就绪(Runnable): 当线程调用了 start()方法后,线程进入就绪状态。此时,线程已经具备了运行的条件,但可能还需要等待系统的调度。
-
运行(Running): 线程进入运行状态时,表示线程正在执行任务。注意,一个单核处理器只能执行一个线程,而多核处理器可以同时执行多个线程。
-
阻塞(Blocked): 当线程等待某些条件满足,无法继续执行时,它就会进入阻塞状态。比如等待一个 I/O 操作完成、获取锁、或者等待其他线程的通知。
-
等待(Waiting): 线程在某些条件下主动等待,此时线程不会执行任何操作,直到其他线程唤醒它。通常通过 wait()方法使线程进入等待状态。
-
超时等待(Timed Waiting): 和等待状态类似,但是可以设置等待的时间,超过时间后线程会自动唤醒。例如通过 sleep()方法或 join() 方法设置线程的超时等待。
-
终止(Terminated): 线程执行完了任务或者因为异常退出了 run() 方法,线程就会进入终止状态。一旦线程进入终止状态,它就不能再切换到其他状态。
这些线程状态之间的转换是动态的,线程可以根据不同的情况在不同状态之间切换。在多线程编程中,了解这些状态可以帮助你更好地理解线程的行为和调度。
七大状态转换图: