面试题:java线程的生命周期?线程的状态是如何转移的(马士兵讲解)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了面试题:java线程的生命周期?线程的状态是如何转移的(马士兵讲解),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1871字,纯文字阅读大概需要3分钟。
内容图文
![面试题:java线程的生命周期?线程的状态是如何转移的(马士兵讲解)](/upload/InfoBanner/zyjiaocheng/616/327c7fed0c224914b0ec765c5ff4e504.jpg)
线程的生命周期,状态是如何转移的
Thread类里有个枚举类:
public enum State {
//新建状态
NEW,
//Runnable状态
RUNNABLE,
//Block阻塞状态
BLOCKED,
//Waiting等待状态
WAITING,
//TimedWaiting等待状态
TIMED_WAITING,
//Terminaled结束状态
TERMINATED;
}
从Thread.State 从这个枚举类里看,java的线程有6个状态:
NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED
下图详细描述了线程生命周期各个状态以及状态之间之间的转换时机
1.新建
New一个线程,还没有调用start(); 时处于新建状态。
2.Runnable状态
线程对象调用start();方法时,它会被线程调度器来执行(也就是交给操作系统执行),操作系统执行的时候,这整个状态叫Runnable状态,Runnable内部又有两个状态:
- a) Ready就绪状态
? 扔到CPU的等待队列里去等待CPU运行
- b) Running状态
? 等真正扔到CPU上去运行的时候叫Running.(调用yield方法,从Running-->Ready,线程调度器选中执行的时候 Ready--->Running)
3.Terminaled结束状态
线程顺利执行完了进入Terminaled结束状态(不可以再回到new状态调用start,这就算结束了)
Runnable还有一些其他状态:
4.TimedWaiting等待
按照时间等待,等待时间结束了自己就到了Running状态。
- Thread.sleep(time);
- o.wait(time);
- t.join(time);
- LockSupport.parkNanos()
都是关于时间等待的方法
5.Waiting等待
在运行过程中,如果调用了:
- o.wait();
- t.join();
- LockSupport.park();
进入waiting状态;
调用
- ? o.notify();
- ? o.notifyAll();
- ? LockSupport.unpark();
又回到Running状态
6.Block阻塞
同步代码块没有获得锁就会阻塞状态,获得锁就是就绪状态
追问1:这些状态,哪些是JVM管理的,哪些是操作系统管理的?
这些状态全是由JVM管理的,因为JVM管理的时候也要通过操作系统,所以,哪个是JVM哪个是操作系统,他俩分不开。JVM是跑在操作系统上的一个普通程序。
追问2:线程什么时候会被挂起?挂起是否也是一个状态?
Running的时候,在一个CPU上会跑很多个线程,CPU会隔一段时间执行这个线程一下,在隔一段时间执行那个线程一下,这是CPU内部的一个调度,把这个状态线程扔出去,从Running扔出去,就叫线程被挂起,CPU控制它。
欢迎关注公众号交流学习,会分享更多项目实践以及学习资料:
内容总结
以上是互联网集市为您收集整理的面试题:java线程的生命周期?线程的状态是如何转移的(马士兵讲解)全部内容,希望文章能够帮你解决面试题:java线程的生命周期?线程的状态是如何转移的(马士兵讲解)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。