打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java 多线程(八) 线程状态图

Java 多线程(八) 线程状态图

  结合多线程的学习过程,介绍线程的状态图,随着学习的深入,这幅图不断加入新的内容。

 

一.线程基本状态图

  这幅图是在Java 多线程(三) 线程的生命周期及优先级出现过的:

  图中是线程运行的基本状态:线程调用start()方法开始后,就进入到可运行状态,随着CPU的资源调度在运行和可运行之间切换;遇到阻塞则进入阻塞状态。

 

二.加入同步的线程状态图

  多线程的同步机制,及synchronized关键字的使用学习:

  Java 多线程(五) 多线程的同步

  Java 多线程(六) synchronized关键字详解                        

 

  于是状态图加入了底下的一部分,如下:

  

  当资源被一个线程访问时,上锁,其他线程就进入了一个锁池(Lock pool)

  当锁被释放,其他线程获得了锁,就变为可运行状态。

 

三.加入线程间的相互作用

  线程间的相互作用:Java 多线程(七) 线程间的通信

  主要是wait和notify方法的介绍。

  具有wait()和notify()的线程状态图:

  

               
  线程调用了wait()方法之后,释放掉锁,进入等待池(Wait pool) ;收到通知之后等待获取锁,获取锁之后才可以运行。

 

总结

  线程被阻塞可能是由于下面五方面的原因:(《Thinking in Java》)

  1.调用sleep(毫秒数),使线程进入睡眠状态。在规定时间内,这个线程是不会运行的。

  2.用suspend()暂停了线程的执行。除非收到resume()消息,否则不会返回“可运行”状态。

  3.用wait()暂停了线程的执行。除非线程收到notify()或notifyAll()消息,否则不会变成“可运行”状态。

  4.线程正在等候一些IO操作完成。

  5.线程试图调用另一个对象的“同步”方法,但那个对象处于锁定状态,暂时无法使用。

 

  所以其实仍然可以使用第一张图来概括性地说明线程的生命周期及各个状态。只不过线程被阻塞的情况分为很多种,后面的图是细化说明。

  所涉及到的两种池:

  Wait pool 等待池

  Lock pool 锁池

 

参考资料

  圣思园张龙老师Java SE系列视频教程。

  《Thinking in Java》

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java线程中sleep和wait的区别详细介绍
Java基础学习——线程故事之同步
Java语言程序设计基础课件ppt第11章 多线程-2
徐葳【2019版最新】40小时掌握Java语言之05多线程
Java线程的深入探讨
Java多线程程序设计详细解析
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服