登录  /  注册
首页 > Java > java教程 > 正文
java线程的几种状态是什么
爱喝马黛茶的安东尼
发布: 2019-12-27 14:53:10
原创
4451人浏览过

java线程的几种状态是什么

Java线程既可以创建,也可以销毁,所以线程是有生命周期的,而线程的生命周期就可以用线程的六种状态来描述。

从Thread类的源码中可以看出线程一共有6种状态:

32f558b7c5a72051dd08b97291af55c.png

这六种状态分别是:

1. New:初始状态,线程被创建,没有调用start()。

2. Runnable:运行状态,Java线程把操作系统中的就绪和运行两种状态统一称为“运行中”。

3. Blocked:阻塞,线程进入等待状态,线程因为某种原因,放弃了CPU的使用权。

阻塞的几种情况:

A. 等待阻塞:运行的线程执行了wait(),JVM会把当前线程放入等待队列。

B. 同步阻塞:运行的线程在获取对象的同步锁时,如果该同步锁被其他线程占用了,JVM会把当前线程放入锁池中。

C. 其他阻塞:运行的线程执行sleep(),join()或者发出IO请求时,JVM会把当前线程设置为阻塞状态,当sleep()执行完,join()线程终止,IO处理完毕线程再次恢复。

4. Waiting:等待状态。

5. timed_waiting:超时等待状态,超时以后自动返回。

6. terminated:终止状态,当前线程执行完毕。

线程的六种状态之间的转换:

当实例化一个线程之后,首先进入初始状态,即New状态,此时线程在启动的时候并不是立刻就运行,而是要等到操作系统调度之后才运行,然后调用start()进入运行状态,即runnable,其中运行状态中包括运行(running)和就绪(ready)两种状态,这两种状态在操作系统的调度下可以互相转换,如果运行中的线程时间片被CPU抢占的话就会变成就绪状态;运行中的线程通过调用synchronized方法或synchronized块进入阻塞状态,即blocked,当线程获取到锁之后进入运行状态;如果线程在执行过程中调用了sleep(),wait().join(),Locksupported.parkUtil()等方法时,会进入等待状态(waiting)或超时等待状态,即timed_waiting,再次调用notify(),notifyAll(),Locksupported.unpark()等方法时,又会重新进入运行时状态,当线程执行完成时,就进入了终止状态,即terminated状态。

注:Locksupported是JDK 1.6提供的一个工具类,在java.util.concurrent包中,它所提供的park,unpark方法比wait,notify方法的灵活性更高。

通过命令行的方式查看线程状态

先介绍两个命令:

1. Jps:JDK 1.5提供的显示当前所有Java进程pid的命令,可以获取相应的进程pid。

2. Jstack:是Java虚拟机自带的一种堆栈跟踪工具,他可以打印出给定的进程pid信息和远程调试服务的Java堆栈信息。

具体操作步骤:

打开终端或命令行工具,输入jps命令,获取pid;

输入jstack pid,查看当前进程的信息。

1577429073(1).jpg

PHP中文网,有大量免费的JAVA入门教程,欢迎大家学习!

以上就是java线程的几种状态是什么的详细内容,更多请关注php中文网其它相关文章!

相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1

 | 本站CDN由 数掘科技 提供

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学