线程的生命周期和状态概述

生命周期:线程也是有生命周期的,也是存在不同的状态的,状态相互之间的转换。

新建状态,就绪状态,运行状态,阻塞状态,死亡状态。

有人把阻塞状态,等待状态,计时等待状态合称为阻塞状态。

线程对象的状态存放在Thread类的内部类(State)中:

注意:Thread.State类其实是一个枚举类。因为线程对象的状态是固定的,只有6种,此时使用枚举来表示是最恰当的。

新建状态(new):使用new创建一个线程对象,仅仅在堆中分配内存空间,在调用start方法之前。

新建状态下,线程压根就没有启动,仅仅只是存在一个线程对象而已。

Thread t = new Thread();//此时t就属于新建状态

当新建状态下的线程对象调用了start()方法,此时从新建状态进入可运行状态。

线程对象的start方法只能调用一次,否则报错

可运行状态(runnable):分成两种状态,reday和running。分别表示就绪状态和运行状态。

就绪状态:线程对象调用start方法之后,等待JVM的调度(此时该线程并没有运行)

运行状态:线程对象获得JVM调度,如果存在多个CPU,那么允许多个线程并行运行

阻塞状态(blocked):正在运行的线程因为某些原因放弃CPU,暂时停止运行,就会进入阻塞状态

  此时JVM不会给线程分配CPU,直到线程重新进入就绪状态,才有机会转到运行状态

  阻塞状态只能先进入就绪状态,不能直接进入运行状态

阻塞状态的两种情况:

  当A线程处于运行过程时,试图获取同步锁时,却被B线程获取,此时JVM把当前A线程存到对象锁池中,A线程进入阻塞状态

  当线程处于运行过程时,发出了IO请求时,此时进入阻塞状态

等待状态(waiting)(等待状态只能被其他线程唤醒):此时使用的无参数wait()方法。

  当线程处于运行过程时,调用了wait()方法,此时JVM把当前线程存在对象等待池中

计时等待状态(timed waiting)(使用了带参数的wait方法或者sleep方法)

  当线程处于运行过程时,调用了wait(long time)方法,此时JVM把当前线程存在对象等待池中

  当线程执行了sleep(long time)方法

终止状态(terminated):通常称为死亡状态,表示线程终止。

  正常执行完run方法而退出(正常死亡)

  遇到异常而退出(出现异常之后,程序就会中断)(意外死亡)

线程一旦终止,就不能再重新启动,否则报错

在Thread类中过时的方法(因为存在线程安全问题,所以弃用了):

void suspend():暂停当前线程

void resume():恢复当前线程

void stop():结束当前线程

时间: 2024-08-08 01:29:25

线程的生命周期和状态概述的相关文章

Java线程 — 线程的通信 — 线程的生命周期和状态概述

生命周期:线程也是有生命周期的,也是存在不同的状态的,状态相互之间的转换. 新建状态,就绪状态,运行状态,阻塞状态,死亡状态. 有人把阻塞状态,等待状态,计时等待状态合称为阻塞状态. 线程对象的状态存放在Thread类的内部类(State)中: 注意:Thread.State类其实是一个枚举类.因为线程对象的状态是固定的,只有6种,此时使用枚举来表示是最恰当的.

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

Java多线程(二).线程的生命周期和状态控制 分类: javaSE综合知识点 2012-09-10 16:11 15937人阅读 评论(3) 收藏 举报 一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable). 注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadSt

Java多线程 2 线程的生命周期和状态控制

一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable). 注意:不能对已经启动的线程再次调用start()方法,否则会出现Java.lang.IllegalThreadStateException异常. 2.就绪状态 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(尽管是采用队列形式,事实上,把它

Java多线程——线程的生命周期和状态控制

一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable). 注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常. 2.就绪状态 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(尽管是采用队列形式,事实上,把它

java_5:线程的生命周期和状态转换

一.线程5个状态的简单介绍 开始:当线程Thread对象创建完成时,线程的生命周期就开始了结束:当run()方法中代码正常执行完毕或者线程抛出一个未捕获的异常(Exception)或错误(Error)时,线程的生命周期结束 线程整个生命周期分为5个阶段: 新建状态(New):此时仅由Java虚拟机为其分配了内存,没有表现出任何线程的动态特征,还不能运行 就绪/可运行状态(Runnable):线程对象调用了start()方法,具备了运行条件,此时线程位于可运行池中.但能否运行,要看是否获得CPU使

线程的生命周期及状态

转载自: http://www.cnblogs.com/HigginCui/p/5903012.html [线程状态] 在线程的生命周期中,它要经过 新建(New).就绪(Runnable).运行(Running).阻塞(Bolcked).死亡(Dead)总共5种状态. 尤其在线程启动之后,它不可能一直占着CPU运行,所以CPU需要在多个线程之间相互切换,于是线程的状态也会多次在运行.阻塞之间切换. [新建和就绪状态] 新建状态:当程序使用new关键字创建了一个线程之后,这个线程就处于新建状态,

Java线程的生命周期与状态流转

上图是一个线程的生命周期状态流转图,很清楚的描绘了一个线程从创建到终止的过程. 这些状态的枚举值都定义在java.lang.Thread.State下 NEW:毫无疑问表示的是刚创建的线程,还没有开始启动. RUNNABLE:  表示线程已经触发start()方式调用,线程正式启动,线程处于运行中状态. BLOCKED:表示线程阻塞,等待获取锁,如碰到synchronized.lock等关键字等占用临界区的情况,一旦获取到锁就进行RUNNABLE状态继续运行. WAITING:表示线程处于无限制

Java中的线程的生命周期大体可分为5种状态

Java中的线程的生命周期大体可分为5种状态. ①NEW:这种情况指的是,通过New关键字创建了Thread类(或其子类)的对象 ②RUNNABLE:这种情况指的是Thread类的对象调用了start()方法,这时的线程就等待时间片轮转到自己这,以便获得CPU:第二种情况是线程在处于RUNNABLE状态时并没有运行完自己的run方法,时间片用完之后回到RUNNABLE状态:还有种情况就是处于BLOCKED状态的线程结束了当前的BLOCKED状态之后重新回到RUNNABLE状态. ③RUNNING

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

刚刚开始学cocos2-x,仅仅是按照教程把已经安了一般Android的开发环境的eclipse重新升级到安装好cdt和ndk就花了我几十小时,差点都要放弃了. 参考博客 D:\cocos2d-x\cocos2d-x-2.2.3\cocos2dx\platform\third_party\android\prebuilt 说说大概的过程: 下载ndk插件,ndk包,cdt插件.最开始我按照书上的下载了cocos2d-x 2.0.1,希望跟书上统一起来,这样以后学习的时候可以参考书上的也不会遇到太