java-多线程-生命周期
来源:互联网 发布:windows xp自带壁纸 编辑:程序博客网 时间:2024/06/05 20:07
多线程有五种生命状态:新建,就绪,运行,阻塞,死亡;
新建:当线程被声明创建后,就进入新建状态;
就绪:新建后的线程调用了start方法,就进入就绪,此时等待cpu调用他;所以启动线程一定是调用start方法;而且只能对新建的线程调用start,不然会
出现IllegalThreadStateException异常
如果想调用了start方法马上开始执行,马上让cput执行它,可以用Thread.sleep(1),这样当前线程会睡眠,而CPU不会停止,就可以让子线程马上执行;
运行:当就绪的线程被调度,获得了cpu资源后,就进入运行状态;
阻塞:某些情况让出cpu,并停止执行;比如:
1.调用了sleep或者suspend方法;其中suspend方法容易引起死锁;
2.等待同步锁;
3.等待其他线程的通知;
4.线程调用了IO阻塞式得方法;(比如等待当前线程等待输入10个字节的数据就一直等着。。)
死亡:线程完成了全部工作或者提前强制性的终止!比如:
1.run或者call方法全部执行完成;正常结束;
2.线程抛出异常或者错误;
3.直接调用stop方法停止线程。这种方法一般不用,容易死锁;
不要对已经死亡的线程再调用start;会出现IllegalThreadStateException异常
从图中可以看到,线程从阻塞只能重新进入就绪状态,等待cpu调度;
main()函数即主函数,是一个前台线程,前台进程是程序中必须执行完成的,而后台线程则是java中所有前台结束后结束,不管有没有完成,后台线程主要用与内存分配等方面。
前台线程和后台线程的区别和联系:
1、后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。
2、可以在任何时候将前台线程修改为后台线程,方式是设置Thread.IsBackground 属性。
3、不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。
4、托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程。
说明:
应用程序的主线程以及使用Thread构造的线程都默认为前台线程
使用Thread建立的线程默认情况下是前台线程,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序
- java多线程生命周期
- Java多线程之生命周期
- Java多线程生命周期
- Java多线程生命周期
- Java多线程生命周期
- Java多线程生命周期
- java-多线程-生命周期
- java多线程的生命周期
- Java SE -- 多线程 线程生命周期
- Java多线程-线程的生命周期
- Java多线程:(二)生命周期
- Java多线程初学者指南:线程的生命周期
- 4. 初学Java多线程:线程的生命周期
- Java多线程学习:线程的生命周期
- 初学Java多线程:线程的生命周期
- 初学Java多线程:线程的生命周期
- java 多线程 入门 线程生命周期图
- Java多线程初学者指南:线程的生命周期
- 日志
- ZOJ3963 Heap Partition
- ReactiveCocoa 和 MVVM 入门
- MUI 做上拉下拉加载更多数据小记
- J2SE知识大汇总
- java-多线程-生命周期
- 记一次部分机型APP打开就Crash的问题
- Cron 表达式的JavaScript验证代码
- vue分页器
- jfinal TX 捕获异常
- Android 线性布局和相对布局
- 在线制作webp格式的图片
- LeetCode 563. Binary Tree Tilt
- 忽略检测png文件