Java的线程状态切换

Java的线程状态切换

在java中,当我们创建一个线程之后,在其生命周期中会有一些列的状态切换,如下图所示:

这里写图片描述


上图很好地反映了线程状态之间的切换。

New

当我们使用New创建一个Thread对象时,此时线程还没有激活,也就是说JVM还并未对其创建其执行上下文路径。

Runnable

当我们调用Thread对象的start()方法时,线程进入Runnable状态,此时JVM将线程的控制权移交给了Thread scheduler, 此后,线程可能立即进入Running状态或者待在runnable thread pool中,这些都取决于OS对Thread scheduler的实现方式。

Running

当线程正在执行时,此时进入Running,Thread scheduler从线程池中选择一个线程将其状态设为Running状态,CPU开始执行该线程,该线程也可以从Running状态切换至Runnable(由于time slicing),Dead(由于run方法执行完毕),Blocked状态(由于读取资源)。

Blocked/Waiting

该线程使用了join()方法等待指定的线程执行完毕进入Dead状态时之前,或者该线程等待获取资源,在这些情况下,该线程都处于Blocked/Waiting状态,当等待结束后,该线程进入Runnable状态,重新回到runnable thread pool中。

Dead

线程执行完毕后进入Dead状态,进入Dead状态的线程不再能够重新激活。

猜你喜欢

转载自blog.csdn.net/u010999240/article/details/48422637