Java线程状态、线程停止、线程阻塞
2017-04-08 16:04
260 查看
原文网址: http://blog.csdn.net/scgaliguodong123_/article/details/46049573
线程状态(五种状态)
Java 线程的生命周期包括
创建,就绪,运行,阻塞,死亡5
个状态。一个 Java 线程总是处于这 5 个生命周期状态之一,并在一定条件下可以在不同状态之间进行转换 。
创建状态 (New Thread)
在 Java 语言中使用
new操作符创建一个线程后,该线程仅仅是一个空对象,它具备了线程的一些特征,但此时系统没有为其分配资源,这时的线程处于创建状态。
就绪状态 (Runnable)
使用
start()方法启动一个线程后,系统为该线程分配了除 CPU 外的所需资源,使该线程处于就绪状态。此外,如果某个线程执行了
yield()方法,那么该线程会被暂时剥夺
CPU 资源,重新进入就绪状态。
运行状态 (Running)
Java运行系统通过调度选中一个处于就绪状态的线程,使其占有 CPU 并转为运行状态。此时,系统真正执行线程的 run() 方法。
阻塞状态 (Blocked)
一个正在运行的线程因某些原因不能继续运行时,它就进入阻塞状态。
这些原因包括:当执行了某个线程对象的
suspend()、sleep()等阻塞类型的方法时,该线程对象会被置入一个阻塞集(Blocked Pool)内,等待被唤醒(执行
resume()方法)或是因为超时而时自动苏醒;
当多个线程试图进入某个同步区域(synchronized)时,没能进入该同步区域的线程会被置入锁定集(Lock Pool),直到获得该同步区域的锁,进入就绪状态;
当线程执行了某个对象的
wait()方法时,线程会被置入该对象的等待集(Wait Pool)中,直到执行了该对象的
notify()方法,
wait()/notify()方法的执行要求线程首先获取到该对象的锁。
死亡状态 (Dead)
线程在
run()方法执行结束后进入死亡状态。此外,如果线程执行了
interrupt()或
stop()方法,那么它也会以异常退出的方式进入死亡状态。
停止线程(两种方式)
1、自然终止:线程体正常执行完毕 2、外部干涉
1)线程类中 定义线程体使用的标识。 2)线程体使用该标识。 3)提供对外的方法,改变该标识。 4) 外部根据条件调用该方法即可1
2
3
4
1
2
3
4
注意:避免使用Thread类自己提供的
stop()(具有不安全性)、suspend()(具有固有的死锁现象)、resume()等方法
线程阻塞
1、join:合并线程 2、yield:暂停自己的线程 static方法
3、sleep:指定的毫秒数内让当前正在执行的线程休眠(暂停执行),不会释放锁。
(1)与时间相关,如倒计时
(2)模拟网络延时
相关文章推荐
- Java线程状态、线程停止、线程阻塞
- 线程状态与停止、阻塞(join、yield、sleep)、基本信息、优先级JAVA174-177
- java中判断线程是否是停止状态
- Java判断线程是否是停止状态的两种方法
- java线程停止、暂停和恢复等状态的控制
- 线程状态与停止、阻塞(join、yield、sleep)、基本信息、优先级JAVA174-177
- java线程停止、暂停和恢复等状态的控制
- JAVA学习笔记50——线程状态+停止进程+阻塞进程
- 关于java线程的停止问题(转载至 http://dev.21tx.com 2005年05月03日 Matrix-与Java共舞 )
- java线程状态(Thread States)
- JAVA线程之四:线程状态检查,后台线程及线程组
- Java开发常用代码----线程暂停(让程序停止一段时间)
- Java线程:线程状态的转换
- Java线程:线程状态的转换
- Java线程:线程状态
- Java线程:线程状态的转换
- 如何停止java线程
- Java实现监控多个线程状态的实现
- java高级多线程编程--关于线程的停止问题
- 【Java.Concurrency】Java线程状态图