线程的生命周期 - 理解Java中线程的状态

标签: 线程 生命周期 理解 | 发表时间:2014-06-02 09:38 | 作者:snarlfuture
出处:http://blog.csdn.net

    如果你在工作中需要使用到线程,或是需要在多线程环境下编程,那么了解 线程的生命周期(Life Cycle of Thread)以及 线程的状态(Thread States)是很有必要的。

    正如我们在上一篇文章中了解到的,通过实现Runnable接口或是继承Thread类,我们可以创建一个 Java线程类。如果想要启动线程,我们需要创建一个线程类,然后调用它的start()方法来执行run()中的任务,这样就能将其线程来运行。

线程的状态

    下图展示了Java中线程的不同状态,需要注意的是,虽然我们创建并启动了线程,但是线程在就绪、运行、阻塞状态间切换则是由操作系统的线程调度器来实现的,Java对此实际上并没有完全控制权。


新建(New)

    我们使用new操作符来创建新的线程对象,线程的状态是“新建”。此时,线程并不是活跃的,它只是Java程序的一个内部状态。

就绪(Runnable)

    当我们调用线程对象的start()方法时,线程的状态切换为“就绪”,而线程的控制权就交给了线程调度器,直至线程结束运行为止。操作系统的线程调度器决定立即启动线程,或是暂时先把它放在就绪线程队列中。

运行(Running)

    当线程开始执行时,它的状态切换为“运行”。线程调度器从就绪队列中选出一个线程,并将它的状态改为“运行”,然后CPU开始执行该线程。如果当前时间片结束,线程会被切换到就绪状态。run()方法执行结束,线程进入死亡状态。而如果线程需要等待某些资源,它则会进入阻塞状态。

阻塞/等待(Blocked/Waiting)

    可以使用 join方法可以让线程进入等待状态直至另一个线程结束运行。或是当线程需要访问某些资源时,例如 生产者消费者问题服务员通知或是IO资源,它也会进入等待状态。一旦线程结束等待,它就进入就绪状态,并被移回就绪线程队列中。

死亡(Dead)

    一旦线程执行结束,它就会进入死亡状态,此时的线程被视为失去活力。

    以上就是线程的不同状态,了解它们并理解如何进行线程状态切换,对你是很有帮助的。


原文地址: Life Cycle of Thread - Understanding Thread States in Java



作者:snarlfuture 发表于2014-6-2 1:38:01 原文链接
阅读:0 评论:0 查看评论

相关 [线程 生命周期 理解] 推荐:

线程的生命周期 - 理解Java中线程的状态

- - CSDN博客推荐文章
    如果你在工作中需要使用到线程,或是需要在多线程环境下编程,那么了解 线程的生命周期(Life Cycle of Thread)以及 线程的状态(Thread States)是很有必要的.     正如我们在上一篇文章中了解到的,通过实现Runnable接口或是继承Thread类,我们可以创建一个 Java线程类.

Spring bean生命周期

- - 开源软件 - ITeye博客
Spring bean生命周期.       在传统的Java应用中,Bean的生命周期非常简单.  Java的关键词new用来实例化Bean(或许他是非序列化的).  相反,Bean的生命周期在Spring容器中更加细致.  理解Spring Bean的生命周期非常重要,因为你或许要利用Spring提供的机会来订制Bean的创建过程.

Activity生命周期详解

- - 编程语言 - ITeye博客
本文概述:针对一个例子详细阐述Activity的生命周期. Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的Activity的集合,这个栈也叫返回栈(Back Stack). 每次我们启动一个新的Activity,这个Activity就会入栈,并处于栈顶位置. 按下返回键或者finish()方法销毁一个Activity时,处于栈顶的Activity就会出栈,另一个Activity就会处于栈顶位置,显示给用户的就会是这个Activity..

敏捷应用生命周期管理

- - 博客 - 伯乐在线
Agile ALM使用敏捷的价值观和策略来充实了ALM,ALM的敏捷做法提升了产品的质量,缩短了上市时间,且有利于开发者以一种更加愉悦的心情来工作. 我对Agile ALM的定义可归结为,一些灵活的、对改变持开发态度的、高质量的过程和工具链. 敏捷应用生命周期管理(Agile Application Lifecycle Management,Agile ALM)正得到越来越大的推动,记得我在撰写“Agile ALM”一书的书稿时,几乎没有人会想到使用敏捷来丰富ALM的做法,或是找出一种有实效的ALM做法,越来越多的工具厂商发现,他们的工具在贴上敏捷工具甚至是敏捷ALM工具的标签之后好卖多了.

spring中Bean的生命周期总结

- - CSDN博客推荐文章
spring中在ApplicationContext或在BeanFactory中Bean的生命周期总结.  Spring中Bean的生命周期,在学习spring的过程中bean的生命周期理解对学习spring有很大的帮助,下面我就分别介绍在ApplicationContext和BeanFactory中Bean的生命周期.

Activity的生命周期方法

- - 移动开发 - ITeye博客
一:Activity的生命周期方法.  Android提供了很多Activity的生命周期方法,比如我们常用的onCreate、onPause、onResume等. 这里主要介绍粗粒度的周期方法,诸如onPostCreate、onPostResume等. 这些细粒度的周期方法可以参考Android的API文档,在你需要更细层次的控制的时候可以使用这些细粒度的方法.

Activity生命周期异常分析

- - 移动开发 - ITeye博客
Activity 生命周期异常分析 . 我们知道正常情况下Activity创建的时候会执行 onCreate onStart onResume 方法;当锁屏情况下Activity会执行 onPause onStop方法;当屏幕再次显示的时候会执行onReStart onStart onResume方法.

一条链接的生命周期究竟有多长

- mia - 36氪
                                                Bit.ly上的1000个流行链接的平均生命周期. 问大家个问题:你认为互联网上出现的一个新链接过多久就没人再去点击了呢. 如果你这个新链接是与新闻相关的链接,那么答案就会变成5分钟. 根据网址缩短服务提供商Bit.ly发布的一项研究报告,大多数网络上分享的链接的生命周期都不长,很快就会淹没在这个电子数据的汪洋大海中.

[信息图表]iPhone和Android的系统生命周期对比

- China Moon - cnBeta.COM
相比iOS系统轻松愉悦的开发过程,Android遭遇开发者吐槽的机会远大于前者,这是由于Android的版本相当杂乱,不同设备对各个版本的支持度又各有不同,导致“碎片”化的结局,虽然Google已经在着力解决此事,但事实情况依旧是Android各版本在各个设备上各自为战,并且对未来的规划不清,以下这张信息图表就是描述Android和iOS的版本及其兼容性现状,相当详细值得参考:.

android 横竖屏切换生命周期详解

- - CSDN博客推荐文章
  曾经遇到过一个面试题,让你写出横屏切换竖屏Activity的生命周期. 现在给大家分析一下他切换时具体的生命周期是怎么样的:. 1、新建一个Activity,并把各个生命周期打印出来. 2、运行Activity,得到如下信息. 3、按crtl+f12切换成横屏时. 4、再按crtl+f12切换成竖屏时,发现打印了两次相同的log.