Java中的生命周期

程序员成长之旅 · 程序员成长之旅/Java学习/笔记 · 505 字

线程的生命周期主要分为如下几个状态:新建状态、可运行状态、运行状态、阻塞状态、终止状态。

假设当前线程处于运行状态,则会改变线程当前状态的操作总结如下:

(1)当前线程执行了yield(),或当前线程因调度策略(执行过程中,有一个更高优先级的线程进入可运行状态,这个线程立即被调度执行,当前线程占有的CPU被抢占;或在分时方式时,当前执行线程执行完当前时间片)从而导致当前线程进入可运行状态。

(2)线程调用了sleep()方法、join()方法、wait()方法时,线程进入阻塞状态。

其中yield()方法的作用是暂停当前线程的执行,从而允许与它具有相同优先级的线程执行,如果不存在可执行且与它同优先级的线程,则继续执行当前线程。

当某线程需要在synchronized块中等待共享数据状态改变时,调用wait()方法,这样该线程等待并暂时释放共享数据对象的锁,其它线程可以获得该对象的锁,并进入synchronized块对共享数据进行操作,而此线程则放入wait pool中,转入阻塞状态,当其它线程对共享数据操作完后,只要调用notify()方法就可以通知正在等待的线程重新占有锁,并运行。

sleep方法的作用是让当前线程处于休眠状态,并持续一定的时间,该时间的长短由sleep()方法的参数决定。sleep()方法结束后,线程将进入可运行状态。

所以对选项A、B、C的调用都会改变线程生命周期中的状态,而isAlive()方法的作用是测试线程,以确定线程是否活着。此方法并不会改变线程生命周期中的状态。