java--线程的生命周期

原创 2015年07月09日 14:08:05
当线程被创建并启动之后,它既不是一启动就进入执行状态,也不是一直处于执行状态,在其生命周期中,要经过"新建(New)"、"就绪(Runnable)"、"运行(Running')"、"阻塞(Blocked)"和"死亡(Dead)"五种状态。线程在创建之后,不可能一直霸占着CPU独立运行,需要在多个线程之间切换,所以大部分时间处于运行、阻塞之间切换。

  一、新建和就绪状态

  (1)、当用new关键字创建一个线程的时候,该线程就处于新建状态;

  (2)、调用start()方法之后,线程就进入了就绪状态。当不能立刻进入运行状态,要等待JVM里线程调度器的调度。

  注意:只能对处于新建状态的线程调用start()方法,否则会引发异常。

  二、运行和阻塞状态

  (1)、如果处于就绪状态的线程获得了CPU,就开始执行run方法,处于了运行状态。当分配的时间用完后,又进入了就绪状态,等待下次分配到CPU在进入运行状态。

  (2)、遇到以下几种情况,线程会进入阻塞状态:

  1)、线程调用sleep()方法主动放弃所占用的处理器资源

  2)、线程调用了一个阻塞式IO方法,在该方法返回之时,该线程被阻塞

  3)、线程试图获得一个同步监视器,但该同步监视器正被其他线程所持有。

  4)、现成在等待某个通知(notify)

  5)、线程调用了线程的suspend()方法将该线程挂起。该方法容易造成死锁,应尽量避免使用该方法。

  进入阻塞状态的程序遇到以下情况才能恢复进入就绪状态,等待分配到资源进入运行状态:

  1)、调用sleep()方法的线程经过了指定时间。

  2)、线程调用的阻塞式IO方法已经返回

  3)、线程成功的获得了试图取得的同步监视器

  4)、线程正在等待的某个通知时,其他线程发出了一个通知(signal)

  5)、处于挂起状态的线程被调用了resume()恢复方法

  三、线程死亡

  (1)、run()或call()方法执行完成,线程正常结束;

  (2)、线程抛出一个未捕获的Exception或Error;

  (3)、直接调用该线程的stop()方法来结束该线程---该方法容易导致死锁,不推荐。

  注意:当主线程结束时,其他线程不收任何影响,并不会随之结束。一旦子线程启动起来后,他就拥有和主线程相同的地位,他不会受主线程的影响。

  为了测试某个线程是否已经死亡,可以调用线程对象的isAlive方法,当线程处于就绪、运行、阻塞3中状态是,该方法返回true;当线程处于新建、死亡2种状态时,该方法将返回false.

  注意:不要试图对一个已经死亡的线程调用start()方法使它重新启动,该线程不可再次作为线程执行。start方法只能对处于新建状态的线程多使用,且只能使用一次!

java--线程--生命周期(简单)

生命周期线程的生命周期,主要有5个状态 新建状态线程类被新建出来就是新建状态; 定义线程类定义线程类有两种方法 实现java.lang.Runnable接口 重写run方法public class ...
  • rod_john
  • rod_john
  • 2017年12月11日 11:45
  • 75

Java--线程生命周期,线程控制

新建--就绪--(阻塞)--运行--死亡 线程状态。线程可以处于下列状态之一: NEW 至今尚未启动的线程处于这种状态。 RUNNABLE 正在 Java 虚拟机中执行的线程处于这种...
  • zlQQhs
  • zlQQhs
  • 2013年01月05日 16:24
  • 602

Java--线程生命周期

新建--停当--(壅闭)--运转--灭亡      线程形态。线潮以处于下列形态之一: NEW 至古还没有启动当边程处于这类形态。 RUNNABLE 正正在 JAVA 虚拟机中执止当...
  • ufodsyfaa
  • ufodsyfaa
  • 2013年07月06日 10:16
  • 634

Android线程的生命周期

1. 线程的生命周期开始于start()方法,终止于run()函数运行结束。 2. 守护线程的生命周期还和JVM有关系,当别的线程都dead时,JVM会kill掉所有守护线程然后退出。 3...
  • ffmpeg4976
  • ffmpeg4976
  • 2015年01月02日 12:00
  • 1635

java线程的基本概念&&生命周期

(一)线程的基本概念: (1)进程与线程: 进程:运行中的应用程序称为进程,拥有系统资源(cpu、内存) 线程:进程中的一段代码,一个进程中可以有多段代码。本身不拥有资源(共享所在进程的...
  • legend050709
  • legend050709
  • 2014年10月03日 16:39
  • 1368

什么是多线程?线程的生命周期?

线程的生命周期,不同状态转换调用的方法,基本属性。
  • jackson_Mr
  • jackson_Mr
  • 2016年09月25日 16:35
  • 2501

java线程生命周期的图示以及文字说明

线程的生命周期,把图转化为文字就是: 线程通过new方法创建,调用start()方法,线程进入就绪状态,等待系统的调度(时间片轮转调度)。当系统调度,进入运行状态。正常结束或者异常退出,进程进入死...
  • u012036171
  • u012036171
  • 2015年06月27日 09:52
  • 3904

【Java多线程】什么是线程与线程的生命周期与线程的创建方式

Q:什么是进程和线程? A:进程是所有线程的集合,每一个线程是进程中的一条执行路径,main也是线程,是主线程。 PS:线程之间互不干扰。 Q:为什么使用多线程? A:提高应用程序的效率,比如下载软件...
  • HTN_MK
  • HTN_MK
  • 2017年08月22日 00:19
  • 258

JAVA线程之七:线程的生命周期及死锁

一,线程的四个主要周期状态是“创建”,“可执行”,“非可执行”,“消亡”,状态转换关系如下图:(1)创建。当实例化一个thread对象并执行start()方法后,线程进入“可执行”状态开始执行。虽然多...
  • zhandoushi1982
  • zhandoushi1982
  • 2010年04月19日 17:13
  • 3987

线程Thread的生命周期以及状态

由于早上没有网,所以几篇写好的博客就一起发啦。       上2篇博客中记录了,线程和进程的异同,操作线程的常用方法的区别,其实,一个线程的生命周期在整个进程中是非常的重要的,它不仅仅关系到...
  • Watering_sea
  • Watering_sea
  • 2015年06月27日 22:44
  • 1434
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java--线程的生命周期
举报原因:
原因补充:

(最多只允许输入30个字)