Java线程生命周期及常用方法说明
一、Java线程的生命周期——6大状态
Java线程从创建到销毁,一共经历6个状态(不一定每一种状态都经历):
NEW:初始状态,线程被构建,但是还没有调用start方法
RUNNABLED:运行状态,JAVA线程把操作系统中的就绪和运行两种状态统一称为“运行中”
BLOCKED:阻塞状态,表示线程进入等待状态,也就是线程因为某种原因放弃了CPU使用权,阻塞也分为几种情况
WAITING:等待状态
TIME_WAITING:超时等待状态,超时以后自动返回
TERMINATED:终止状态,表示当前线程执行完毕
Java线程从创建到销毁,一共经历6个状态(不一定每一种状态都经历):
sleep和wait/notify机制, 线程阻塞和等待的区别
sleep()方法
sleep()方法是Thread类的方法,通过其定义可知是个native方法,在指定的时间内(精度取决于CPU)线程进入TIMED_WAITING状态阻塞执行。而且从其注释中可知,并不会失去对任何监视器(monitors)的所有权,也就是说不会释放锁,仅仅会让出cpu的执行权。如下图所示
调用sleep方法后,线程进入的是TIMED_WAITING状态。Javadoc也说了,调用Thread.sleep方法后,就会进入TIMED_WAITING状态(Linux中是S状态):
同时,Javadoc也说明,只有在等待监视器锁(Monitor lock)时,才会进入BLOCKED状态(Linux中也是S状态):
wait()方法
wait/notify机制
wait()方式是基类Object的方法,其实也是个native方法
不管是wait()还是wait(long timeout, int nanos),其调用的都是wait(long timeout)
The current thread must own this object's monitor
根据注释中的一句话,可以看出此方法调用的前提是当前线程已经获取了对象监视器monitor的所有权。
该方法会调用后不仅会让出cpu的执行权,还会释放锁(即monitor的所有权),并且进入wait set中,知道其他线程调用notify()或者notifyall()方法,或者指定的timeout到了,才会从wait set中出来,并重新竞争锁。
区别
最主要的区别就是释放锁(monitor的所有权)与否,但是两个方法都会抛出InterruptedException。
Java线程生命周期及常用方法说明相关推荐
- java resume过时方法_面试官没想到,一个 Java 线程生命周期,我可以扯半小时
面试官:你不是精通 Java 并发吗?从基础的 Java 线程生命周期开始讲讲吧. 好的,面试官.吧啦啦啦... 如果要说 Java 线程的生命周期的话,那我觉得就要先说说操作系统的线程生命周期 因为 ...
- 详解Java线程生命周期与状态切换
前提 最近有点懒散,没什么比较有深度的产出.刚好想重新研读一下JUC线程池的源码实现,在此之前先深入了解一下Java中的线程实现,包括线程的生命周期.状态切换以及线程的上下文切换等等.编写本文的时候, ...
- Java线程生命周期与状态切换
前提# 最近有点懒散,没什么比较有深度的产出.刚好想重新研读一下JUC线程池的源码实现,在此之前先深入了解一下Java中的线程实现,包括线程的生命周期.状态切换以及线程的上下文切换等等.编写本文的时候 ...
- 这么说线程生命周期是不是简单了点?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「日拱一兵」 为什么要了解线程的生命周期 ...
- 创建线程的几种方式?JSP的九大内置对象及作用分别是什么?servlet的生命周期及常用方法?转发和重定向区别?ajax书写方式及内部主要参数都有哪些
文章目录 1 , 创建线程的几种方式? 问题扩展: 2 ,JSP的九大内置对象及作用分别是什么? (1) 问题分析: (2) 核心答案讲解: 1.request对象 2.response对象 3.se ...
- java main生命周期_Java从入门到入土(62)线程的生命周期
线程是程序内部的一个顺序控制流,他具有一个特定的生命周期.在一个线程的生命周期中,他总是处于某一种状态中.线程的状态表示了线程正在进行的活动以及在这段时间内线程能完成的任务. 线程的生命周期包括五个状 ...
- 【JAVA多线程学习笔记】(1)实现线程的方式 线程生命周期 操作线程的方法
文章目录 两种方式实现线程 继承Thread类 模拟银行叫号的程序 Runnable接口 代码1:(与swing相结合创建gui程序) Thread类的⼏个常⽤⽅法 线程生命周期 操作线程的方法 代码 ...
- java线程基础巩固---线程生命周期以及start方法源码剖析
上篇中介绍了如何启动一个线程,通过调用start()方法才能创建并使用新线程,并且这个start()是非阻塞的,调用之后立马就返回的,实际上它是线程生命周期环节中的一种,所以这里阐述一下线程的一个完整 ...
- java不同进程的相互唤醒_Java线程生命周期与状态切换
前提 最近有点懒散,没什么比较有深度的产出.刚好想重新研读一下JUC线程池的源码实现,在此之前先深入了解一下Java中的线程实现,包括线程的生命周期.状态切换以及线程的上下文切换等等.编写本文的时候, ...
最新文章
- VS 2017显示“高级保存选项”命令操作方法
- ClusterWare 服务介绍
- MFC添加背景图片方法
- 大数运算(7)——大数阶乘(求阶乘)
- 荣耀6plus+android5.1,荣耀66Plus EMUI3.0开发版5.5.1版本发布说明
- [原创]Clang with Microsoft CodeGen小测试
- MySQL5.7 踩坑实录
- Codeforces Good Bye 2015 D. New Year and Ancient Prophecy 后缀数组 树状数组 dp
- icloudbypassca工具win版_Photoshop插件提示无法加载扩展,因为它未经正确签署的解决办法(win/mac)...
- (转)姚期智:呼之欲出的量子计算机,和它漫长的最后一英里(全文)
- 搭建 Ubuntu 可视化界面
- html怎么快捷复制粘贴,如何快速复制粘贴 最全复制粘贴攻略教程大全
- hmcl启动器怎么联机_HMCL 启动器教程 #1 安装启动器
- 指南针c语言程序,HMC5883L电子指南针单片机程序
- 盘点!AGV的12种导引导航方式
- A Re-evaluation of Temporal Knowledge Graph Completion Models under a Unified Framework
- [亲自试过有效] 错误1606。无法访问网络位置
- 广电网络电视怎么服务器连接中断,怎么解决广电网络看电视卡
- Macbook 苹果电脑 安装搭建Vue脚手架教程m1芯片Vue脚手架初学
- ALSA音频编程常用参数详细说明