您的位置:首页 > 编程语言 > Java开发

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

2016-06-02 10:55 323 查看

线程的生命周期

线程创建并启动后,不是一启动就进入执行状态,也不会一直处于执行状态。

线程启动后不可能一直霸占CPU,所以CPU会在多线程之间切换,于是线程状态也会多次在运行、阻塞之间切换

在线程的生命周期中,线程共有5种状态,在任意时刻,线程的状态只能是其中的一种

状态说明
New初始状态 —>使用new关键字,创建一个线程,但是还没有调用start方法,仅仅由JVM分配内存,并初始化成员变量
Runnable就緒状态 —> 调用start()后处于就绪状态,JVM为其创建方法调用栈和程序计数器,但线程并没有开始运行,仅表示可以运行。何时开始,取决于JVM里的线程调度器的调度
Running运行状态 —>处于就绪状态的线程,获得了CPU,开始执行run()方法,则处于运行状态
Blocked阻塞状态 —> 表示线程阻塞于锁。线程之间需要切换,时间段用完后,系统会剥夺线程占用的资源,让其他线程执行,选择哪个线程,系统会考虑线程的优先级。调用sleep(),调用阻塞式IO方法,等待同步锁,等待通知wait(),suspend(),join(),这些将使得线程进入阻塞状态
Waiting等待状态 —> 进入该状态后需要其他线程做出通知动作,也可以算是阻塞状态。需要notify()唤醒线程,使之进入就绪状态
Time_Waiting超时等状态状态 —> 该状态与WAITING不同,它是可以在指定时间内自行返回的。相当于在等待状态基础上,增加了时间的限制,超过了设定的时间限制就会返回到运行状态
Dead死亡状态 —> 线程执行完毕。run()或call()执行完成,线程抛出未捕获的Exception或Error,调用该线程的stop(),都会结束线程。


为了测试线程是否已经死亡,可以调用线程对象的isAlive()方法,若处于就绪、运行、阻塞三种状态,方法返回true;若线程处于新建、死亡状态,方法返回false。

不能对已经死亡的线程调用start()方法,重新启动,否则抛IllegalThreadStateException异常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 多线程