【JAVA】线程生命周期
线程五大状态
新建状态(New)
当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码。
就绪状态/可运行状态(Runnable)
一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,获取时间片。start()方法创建线程运行的系统资源,并调度线程运行run()方法。当时间用完了,start()方法返回后,线程就处于就绪状态。处于就绪状态的线程并不一定立即运行run()方法,线程还必须同其他线程竞争CPU时间,只有获得CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。对多个处于就绪状态的线程是由Java运行时系统的线程调度程序(thread scheduler)来调度的。
运行状态(Running)
当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法.
阻塞状态(Blocked)
线程运行过程中,可能由于各种原因进入阻塞状态:
1、线程通过调用sleep方法进入睡眠状态;
2、线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回到它的调用者;
3、线程试图得到一个锁,而该锁正被其他线程持有;
4、线程在等待某个触发条件;
......
所谓阻塞状态是正在运行的线程没有运行结束,暂时让出CPU,这时其他处于就绪状态的线程就可以获得CPU时间,进入运行状态。而当其他线程执行完了,处于阻塞态的线程就又可以再恢复到就绪状态。
死亡状态(Dead)
有两个原因会导致线程死亡:
1、 run方法正常退出而自然死亡,
2、一个未捕获的异常终止了run方法而使线程猝死。
为了确定线程在当前是否存活着(就是要么是可运行的,要么是被阻塞了),需要使用isAlive方法。
【如果是可运行或被阻塞,这个方法返回true】
【如果线程仍旧是new状态且不是可运行的, 或者线程死亡了,则返回false.】
相关文章
- JAVA 发布web项目时war包的解压与打包
- java 程序员 和 三八女神节有什么神秘的关系,你晓得吗? 用Java 给女神绘制一张贺卡你会吗?
- Java线程池实现原理及其在美团业务中的实践
- 保持java线程间可见性的5种方式
- 分析java程序中cpu占用过高的线程
- java中jvm使用jststak定位线程cpu占用内存高的线程
- JNI开发-Java从C/C++获取List集合对象
- Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求
- Java线程锁,synchronized、wait、notify详解--java 管程
- 还不知道如何在java中终止一个线程?快来,一文给你揭秘
- java高级用法之:在JNA中将本地方法映射到JAVA代码中
- java中ThreadLocalRandom的使用
- java算法-单向队列
- 『Java练习生的自我修养』java-se进阶³ • 线程的等待与唤醒
- Java面向对象(二)学习笔记 补线程
- Java并发编程:守护线程
- Java学习路线:day22 枚举类与注解
- Java线程创建的两种方式
- 【java养成】:基础练习题(18道(水仙花数、toShing方法、线程等等))
- Java拼图游戏,老程序员花两天搞定,你呢?
- 曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果
- Java多线程基础(一)---线程安全(synchronized关键字this锁和class锁分析)
- Java多线程基础(一)---线程的创建和生命周期
- JAVA中取整数的四种方法有哪些?面试篇(第五天)
- Java UDP 单播、多播(组播)、广播、任播(未实现)
- Java POI组件——写Excel