【Java】【多线程】线程的生命周期

原创 2018年04月17日 16:48:18

 

转载:https://blog.csdn.net/miss_dongangel/article/details/51195337

非常全面


1、新建状态

   

     用继承Thread类或实现Runable接口或其他方法建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable

    

注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常。


2、就绪状态


    处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(尽管是采用队列形式,事实上,把它称为可运行池而不是可运行队列。因为cpu的调度不一定是按照先进先出的顺序来调度的),等待系统为其分配CPU。等待状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会从等待运行状态进入运行状态系统挑选的动作称之为“cpu调度”。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。


提示:如果希望子线程调用start()方法后立即执行,可以使用Thread.sleep()方式使主线程睡眠一伙儿,转去执行子线程。


3、运行状态

    

    处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。

    处于就绪状态的线程,如果获得了cpu的调度,就会从就绪状态变为运行状态,执行run()方法中的任务。如果该线程失去了cpu资源,就会又从运行状态变为就绪状态。重新等待系统分配资源。也可以对在运行状态的线程调用yield()方法,它就会让出cpu资源,再次变为就绪状态。


    当发生如下情况是,线程会从运行状态变为阻塞状态:

①、线程调用sleep方法主动放弃所占用的系统资源,让出CPU

②、线程调用一个阻塞式IO方法,在该方法返回之前,该线程被阻塞

③、线程试图获得一个同步监视器,但更改同步监视器正被其他线程所持有

④、线程使用wait()方法让出系统资源后在等待某个通知(notify),

⑤、程序调用了线程的suspend方法将线程挂起。不过该方法容易导致死锁,所以程序应该尽量避免使用该方法。


    当线程的run()方法执行完,或者被强制性地终止,例如出现异常,或者调用了stop()、desyory()方法等等,就会从运行状态转变为死亡状态。


4、阻塞状态


    处于运行状态的线程在某些情况下,如执行了sleep(睡眠)方法,或等待I/O设备等资源,将让出CPU并暂时停止自己的运行,进入阻塞状态。 

    在阻塞状态的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的I/O设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待,被系统选中后从原来停止的位置开始继续运行。有三种方法可以暂停Threads执行:


5、死亡状态


    当线程的run()方法执行完,或者被强制性地终止,就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。 如果在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/love_Aym/article/details/79976955

JavaSE之多线程实战视频课程

多线程的概念 在Java中实现多线程 Thread类 Runnable接口 线程的生命周期和线程状态 后台线程 线程同步
  • 2016年10月12日 11:25

新手学JAVA(十一)-多线程----线程的生命周期

新建和就绪状态 运行状态和阻塞状态 线程死亡    当一个线程被创建并启动之后,并不是一开始就处于执行状态,已不是一直处于运行状态。线程也是有生命周期的,包括:创建(New)、就绪(Runnable)...
  • u010853701
  • u010853701
  • 2016-06-27 16:16:15
  • 2734

Java多线程之状态与生命周期

线程的生命周期线程创建并启动后,不是一启动就进入执行状态,也不会一直处于执行状态。线程启动后不可能一直霸占CPU,所以CPU会在多线程之间切换,于是线程状态也会多次在运行、阻塞之间切换在线程的生命周期...
  • qq_33938256
  • qq_33938256
  • 2016-06-02 10:55:35
  • 662

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

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

Java多线程之线程生命周期以及线程各个时期的状态

Java 1.8的API也严格说明了线程的几种状态: 这里的NEW 状态说的是,这个线程还没有启动。对应我们下图的创建状态。 RUNNABLE:线程已经正在执行或者将要执行(都在JVM),对应...
  • uniquewonderq
  • uniquewonderq
  • 2015-08-31 23:05:00
  • 1452

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

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

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

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

Java多线程(二)、线程的生命周期和状态控制

  • 2016年11月28日 22:03
  • 826KB
  • 下载

IBM---Java 多线程与并发编程专题

http://www.ibm.com/developerworks/cn/java/j-concurrent/   有线程安全也有线程池的实现~...
  • fhx007
  • fhx007
  • 2015-06-11 10:38:33
  • 784

线程生命周期流程图

  • 2013年06月09日 00:26
  • 314B
  • 下载
收藏助手
不良信息举报
您举报文章:【Java】【多线程】线程的生命周期
举报原因:
原因补充:

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