Java线程的状态
2016-05-07 15:15
309 查看
Java线程的状态
线程对象在不同的运行时期有不同的状态,状态信息就存在于Thread中的State枚举中,如下所示:
NEW状态表示刚刚创建的线程,这种线程还没开始执行。等到线程的start()方法调用时,才表示线程开始执行。当线程执行时,处于RUNNALE状态,表示线程所需的一切资源都已经准备好了。如果线程在执行过程中遇到了synchronized同步块,就会进入BLOCKED阻塞状态,这时线程就会暂停执行,直到获得请求的锁。WAITING和TIMED_WAITING都表示等待状态,它们的区别是WAITING会进入一个无时间限制的等待,TIMED_WAITING会进入一个有时间限制的等待。WAITING的线程是在等待一些特殊的事件。比如,通过wait()方法等待的线程在等待notify()方法,而通过join()方法等待的线程则会等待目标线程的终止。一旦等到了期望的事件,线程就会再次执行,进入RUNNABLE状态。当线程执行完毕后,则进入TERMINATED状态,表示结束。
从NEW状态出发后,线程不能再回到NEW状态,同理,处于TERMINATED的线程也不能再回到RUNNABLE状态。
线程状态图如下所示:
线程对象在不同的运行时期有不同的状态,状态信息就存在于Thread中的State枚举中,如下所示:
public enum State { /** * 至今尚未启动的线程处于这种状态. */ NEW, /** * 正在Java虚拟机中执行的线程处于这种状态. */ RUNNABLE, /** * 受阻塞并等待某个监视器锁的线程处于这种状态. */ BLOCKED, /** * 无限期地等待另一个线程来执行某一特定操作的线程处于这种状态. */ WAITING, /** * 等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态. */ TIMED_WAITING, /** * 已退出的线程处于这种状态. */ TERMINATED; }
NEW状态表示刚刚创建的线程,这种线程还没开始执行。等到线程的start()方法调用时,才表示线程开始执行。当线程执行时,处于RUNNALE状态,表示线程所需的一切资源都已经准备好了。如果线程在执行过程中遇到了synchronized同步块,就会进入BLOCKED阻塞状态,这时线程就会暂停执行,直到获得请求的锁。WAITING和TIMED_WAITING都表示等待状态,它们的区别是WAITING会进入一个无时间限制的等待,TIMED_WAITING会进入一个有时间限制的等待。WAITING的线程是在等待一些特殊的事件。比如,通过wait()方法等待的线程在等待notify()方法,而通过join()方法等待的线程则会等待目标线程的终止。一旦等到了期望的事件,线程就会再次执行,进入RUNNABLE状态。当线程执行完毕后,则进入TERMINATED状态,表示结束。
从NEW状态出发后,线程不能再回到NEW状态,同理,处于TERMINATED的线程也不能再回到RUNNABLE状态。
线程状态图如下所示:
相关文章推荐
- Java线程的状态
- Java之------类加载器(一)
- struts2的属性模型和驱动模型
- 《java入门第一季》之面向对象综合小案例
- 《java入门第一季》之面向对象综合小案例
- 使用JAVA中的动态代理实现数据库连接池
- struts2标签循环一个数字及判断字符串相等的用法
- (一)JDK和Eclipse安装
- 重新学javaweb---JavaEE 监听器
- 【Eclipse】各个版本(package)的区别以及选择标准
- Spring 4 MVC hello world 教程-完全基于XML(带项目源码)【超赞】
- MyEclipse10优化配置
- 用idea写java web ,jsp被编译出的servlet被放在哪里
- Elasticsearch 使用java来进行crud操作
- 设计模式(2)--java动态代理及jdk和cglib的区别
- Java多线程-Lock锁的使用,以及生产者和消费者的实现
- Spring之数据库操作
- SpringMVC实战(二)-运行原理
- Eclipse构建maven web项目
- Java构造器和方法的区别