11.3-全栈Java笔记:线程的生命周期

来源:互联网 发布:中国联通网络套餐 编辑:程序博客网 时间:2024/06/06 23:50


一个线程对象在它的生命周期内,需要经历5个状态。

新生状态(New)

new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态。

就绪状态(Runnable)

处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于 “线程就绪队列”,等待系统为其分配CPU。 就绪状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会进入执行状态。 一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。有4中原因会导致线程进入就绪状态:

1. 新建线程,调用start()方法,进入就绪状态

2. 阻塞线程,阻塞解除,进入就绪状态。

3. 运行线程,调用yield()方法,直接进入就绪状态。

4. 运行线程,JVM将CPU资源从本线程切换到其他线程。

 运行状态(Running)

在运行状态的线程执行自己的run方法中代码,直到调用其他方法而终止、或等待某资源而阻塞或完成任务而死亡。如果在给定的时间片内没有执行结束,就会被系统给换下来回到就绪状态。也可能由于某些导致阻塞的事件而进入阻塞状态。

阻塞状态(Blocked)

阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪)。

4种原因会导致阻塞:

1.执行sleep(int millsecond)方法,使当前线程休眠,进入阻塞状态。当指定的时间到了后,线程进入就绪状态。

2.执行wait()方法,使当前线程进入阻塞状态。当使用nofity()方法唤醒这个线程后,它进入就绪状态。

3.线程运行时,某个操作进入阻塞状态,比如执行IO流操作(read()/write()方法本身就是阻塞的方法)。只有当引起该操作阻塞的原因消失后,线程进入就绪状态。

4.join()线程联合当某个线程等待另一个线程执行结束后,才继续执行时,使用join方法。使调用该方法的线程在此之前执行完毕,也就是等待调用该方法的线程执行完毕后再往下继续执行。

死亡状态(Teminiated)

死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有两个。一个是正常运行的线程完成了它run()方法的全部工作; 另一个是线程被强制性地终止,如通过执行stopdestroy方法来终止一个线程。(stop()/destroy()方法已经被JDK废弃,不推荐使用)

当一个线程进入死亡状态以后,就不能再回到其它状态了。




「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。


 笔记包含从浅入深的六大部分:

 A-Java入门阶段

 B-数据库从入门到精通

 C-手刃移动前端和Web前端

 D-J2EE从了解到实战

 E-Java高级框架精解

 F-Linux和Hadoop