老李分享:java线程生命周期

  poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-84505200。测试开发工程师用的比较多的测试开发语言是java,python,在接口测试中用php的也不少,为了发挥语言的特性,我们要对语言的细节也要了解,所以在测试开发的课程中我们会对java做细致的培训。

对于多线程编程而言,理解线程的生命周期非常重要,本文就针对这一点进行讲解。

一、线程的状态

线程的存在有几种不同的状态,如下:

  • New状态

  • Ready状态

  • Running状态

  • Dead状态

  • Non Runnable状态

1、New状态

New状态是线程已经被创建,但是还未开始运行的状态。此状态通过调用线程的start()方法可让线程运行。

2、Runnable状态

Runnable状态可称为准备运行状态,也可称为队列,此状态通过调用线程的start()方法可让线程运行。 
线程调度器决定要运行哪些线程,且线程运行多久。

3、Running状态

如果一个线程正在执行中,那么它处于Running状态。

4、Dead状态

一旦某个线程进入了Dead状态,那么它就再也不能运行了。

5、Non runnable状态

某个正在运行的线程可转变到Non runnable状态,这取决于运行情况。 
某个线程还可以一直保持Non runnable状态,直到满足的条件出现。 
某个Non runnable状态的线程不能直接跳转到运行状态,而是必须先转变为Runnable状态。 
睡眠Sleeping:线程睡眠指定的时间。 
I/O阻塞:线程等待,直到阻塞操作的完成。 
join阻塞:线程等待,直到另一个线程执行完成。 
等待通知:线程等待另一个线程的通知。 
锁机制阻塞:线程等待,直到指定的锁被释放,获得锁。

Java虚拟机JVM根据线程的优先级和调度原则执行线程。