进程状态

img

创建状态

进程由创建而产生,创建进程是一个非常复杂的过程,一般需要通过多个步骤才能完成:如首先由进程申请一个空白的进程控制块(PCB),并向PCB中填写用于控制和管理进程的信息;然后为该进程分配运行时所必须的资源;最后,把该进程转入就绪状态并插入到就绪队列中

就绪状态

这是指进程已经准备好运行的状态,即进程已分配到除CPU以外所有的必要资源后,只要再获得CPU,便可立即执行,如果系统中有许多处于就绪状态的进程,通常将它们按照一定的策略排成一个队列,该队列称为就绪队列,有执行资格,没有执行权的进程

运行状态

这里指进程已经获取CPU,其进程处于正在执行的状态。对任何一个时刻而言,在单处理机的系统中,只有一个进程处于执行状态而在多处理机系统中,有多个进程处于执行状态,既有执行资格,又有执行权的进程

阻塞状态

这里是指正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行的状态,即进程执行受到阻塞,此时引起进程调度,操作系统把处理机分配给另外一个就绪的进程,而让受阻的进程处于暂停的状态,一般将这个暂停状态称为阻塞状态

终止状态

线程的状态

在这里插入图片描述

新建状态(New)

在这个状态下,线程对象已经被创建,但是还没有调用 start() 方法启动线程。此时,线程对象只是一个普通的Java对象,还没有被分配操作系统资源。

就绪状态(Runnable)

当调用了线程对象的 start() 方法后,线程就进入了就绪状态。在这个状态下,线程已经被加入到线程调度器的就绪队列中,等待被分配CPU时间片来执行任务。

运行状态(Running)

当线程获得了CPU时间片,开始执行任务时,它处于运行状态。在这个状态下,线程正在执行自己的任务代码。

阻塞状态(Blocked)

线程进入阻塞状态通常是因为某些原因导致了线程无法继续执行。常见的阻塞原因包括等待I/O操作完成、等待获取锁、等待条件满足等。当阻塞的原因消失后,线程会重新进入就绪状态等待执行。

等待状态(Waiting)

线程进入等待状态是因为它在某个对象上等待。例如,线程调用了 Object.wait() 方法或者 Thread.join() 方法时会进入等待状态。在等待状态下,线程会释放掉它所持有的锁,直到其他线程唤醒它。

定时等待状态(Timed Waiting)

和等待状态类似,但是在这个状态下,线程在等待一段时间或者等待某个条件满足之前会超时返回。例如,调用 Thread.sleep() 方法或者 Object.wait(timeout) 方法时会使线程进入定时等待状态。

终止状态(Terminated)

线程处于终止状态表示它已经执行完任务或者被提前中断。当线程的 run() 方法执行完毕或者调用了 Thread.interrupt() 方法中断线程时,线程会进入终止状态。