多线程--生命周期 状态图
来源:互联网 发布:网络强国 群众参与 编辑:程序博客网 时间:2024/06/16 14:00
线程状态图
结合多线程的学习过程,介绍线程的状态图,随着学习的深入,这幅图不断加入新的内容。
一.线程基本状态图
这幅图是在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 多线程状态图
- java多线程状态图
- Java 多线程之线程状态图
- java中多线程的状态图
- 【java0005】 多线程-线程的状态图
- Hibernate生命周期简述与UML状态图
- 状态图
- 状态图
- 状态图
- 状态图
- 状态图
- 状态图
- 状态图
- 状态图
- 状态图
- 状态图
- Django Q对象
- mysql查询优化
- Ubuntu Desktop 16.04下安装Visual Studio Code
- postgis2.2安装教程
- 欢迎使用CSDN-markdown编辑器
- 多线程--生命周期 状态图
- 学习笔记:浏览器渲染优化——关键渲染路径
- 【软件工程】面向对象之设计模式
- 项目中模拟服务器响应与实现异步请求(react)
- 图片懒加载
- 40个Java多线程问题总结
- pandas中set_index用法
- 实现一个函数,判断一个数是不是素数
- Label Shuffing