12.3.2 运行状态(Runnable)
从JVM的角度来看,处于Runnable状态的线程正在执行,但实际上它可能正在等待来自操作系统(如CPU等)的某些资源。因此,可以将该状态看作是具有两个子状态(Ready和Running)的复合状态。
当线程在调用start()方法之后,线程就会进入就绪状态(Ready),此时线程将在线程等待队列中进行排队。当线程获得了资源以及CPU的使用权,就会进入正在运行状态(Running),从而开始运行。线程的运行取决于操作系统的线程调度、运行资源以及线程优先级等因素。
另外,当线程失去了CPU使用权(使用完CPU时间片)之后,系统就会剥夺该线程占用的CPU资源,让其他线程获得CPU使用权,这个时候线程就会从正在运行状态(Running)变为就绪状态(Ready),重新进入等待队列进行等待。除此之外,通过对正在执行的线程调用了Thread.yield()方法,那么正处于运行的线程会让出CPU使用权,回到就绪状态,重新进入等待队列进行排队。(https://www.daowen.com)
提示:
可以使用public final boolean isAlive()来判断当前线程是否处于当前状态。如果线程处于Runnable状态则返回true,反之返回false。