Java并发编程的基础-线程的生命周期
Java线程既然能够创建,那么也势必会被销毁,所以线程是存在生命周期的,那么我们接下来从线程的生命周期开始去了解线程。
线程一共有6种状态(NEW、RUNNABLE、BLOCKED、WAITING、TIME_WAITING、TERMINATED)
NEW:初始状态,线程被构建,但是还没有调用start方法
RUNNABLED:运行状态,JAVA线程把操作系统中的就绪和运行两种状态统一称为“运行中”
BLOCKED:阻塞状态,表示线程进入等待状态,也就是线程因为某种原因放弃了CPU使用权,阻塞也分为几种情况
等待阻塞:运行的线程执行wait方法,jvm会把当前线程放入到等待队列
同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被其他线程锁占用了,那么jvm会把当前的线程放入到锁池中
其他阻塞:运行的线程执行Thread.sleep或者t.join方法,或者发出了I/O请求时,JVM会把当前线程设置为阻塞状态,当sleep结束、join线程终止、io处理完毕则线程恢复
TIME_WAITING:超时等待状态,超时以后自动返回
TERMINATED:终止状态,表示当前线程执行完毕
启动一个线程前,最好为这个线程设置线程名称,因为这样在使用jstack分析程序或者进行问题排查时,就会给开发人员提供一些提示
显示线程的状态
运行该示例,打开终端或者命令提示符,键入“jps”,(JDK1.5提供的一个显示当前所有java进程pid的命令)
根据上一步骤获得的pid,继续输入jstack pid(jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息)
通过上面的分析,我们了解到了线程的生命周期,现在在整个生命周期中并不是固定的处于某个状态,而是随着代码的执行在不同的状态之间进行切换
线程的启动
前面我们通过一些案例演示了线程的启动,也就是调用start()方法去启动一个线程,当run方法中的代码执行完毕以后,线程的生命周期也将终止。调用start方法的语义是当前线程告诉JVM,启动调用start方法的线程。
Java并发编程的基础-线程的生命周期相关推荐
- Java并发编程的基础-线程的终止原理
我们来看一下 thread.interrupt()方法做了什么事情 这个方法里面,调用了interrupt0(),这个方法在前面分析start方法的时候见过,是一个native方法,这里就不再重复贴代 ...
- Java并发编程的基础-线程的终止
线程的启动过程大家都非常熟悉,但是如何终止一个线程呢? 这是面试过程中针对3年左右的人喜欢问到的一个题目. 线程的终止,并不是简单的调用stop命令去.虽然api仍然可以调用,但是和其他的线程控制方法 ...
- 学习笔记:Java 并发编程①_基础知识入门
若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...
- java并发编程实践(2)线程安全性
[0]README 0.0)本文部分文字描述转自:"java并发编程实战", 旨在学习"java并发编程实践(2)线程安全性" 的相关知识: 0.1)几个术语( ...
- Java并发编程实战基础概要
文章目录 Java并发编程实战基础概要 开篇 多线程问题有啥难点呢? 为啥要学习并发编程? 并发问题的根源是什么? CPU切换线程执导致的原子性问题是如何发生的? 缓存导致的可见性问题是如何发生的? ...
- Java 多线程(三) 线程的生命周期及优先级
Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: ...
- Java并发编程—什么是线程?
原文作者:way_more 原文地址:Java 多线程常见基础面试题总结,面试必看! 目录 一.什么是线程和进程? 二.简要描述线程与进程的关系 三.FAQ 一.什么是线程和进程? 1.1. 何为进程 ...
- java并发编程第一课 线程的创建、停止和状态变更
开篇词: 由点及面,搭建你的 Java 并发知识网 你好,欢迎学习<Java 并发编程核心 78 讲>,我是讲师星星,一线互联网公司资深研发工程师,参与过集团内多个重点项目的设计与开发. ...
- JAVA并发编程的基础
1.线程简介 什么是线程? 操作系统在运行一个程序时,会为其创建一个进程. 线程是操作系统调度的最小单元,也叫轻量级进程. 在一个进程里可以创建多个线程,这些线程拥有各自的计数器.堆栈和局部变量等属性 ...
最新文章
- 世界上最大的黑客 Party,有关“DEFCON”的十个冷知识
- selector多路复用_超详细的I/O多路复用概念、常用I/O模型、系统调用等介绍
- 关于readdir返回值中struct dirent.d_type的取值有关问题(转)
- 技术干货|基于Apache Hudi 的CDC数据入湖
- 优雅地关闭资源,try-with-resource语法和lombok@Cleanup
- react native开发的新闻客户端
- Bootstrap 可切换的标签导航
- 论文《Learning Spatial Fusion for Single-Shot Object Detection》解读
- PL/SQL远程连接Oracle数据库服务器
- 如何在Python中创建常量?
- 调整DOS窗口大小的方法 2021-03-06
- eclipse angularjs 插件安装
- FFmpeg —— 屏幕录像机
- Android音量系统分析
- Vulcan 团队信息
- 读取文件云服务器bcc,云服务器bcc 使用
- 一个很好的看电子书的软件
- 『R语言Python』建模前的准备:连续型与离散型变量探索,离散型变量转为虚拟变量
- 用canvas画一个太极图(八卦图)
- win10安装wsl 2.0子系统 安装在非C盘
热门文章
- 安装java环境linux和windows
- jQuery 阻止冒泡和默认事件
- POJ2513-Colored Sticks
- UVA11019 Martix Matcher --- AC自动机
- selenium,webdriver 执行js语句 对象是百度
- Win10 IoT 10 中文显示乱码或报错的问题
- .Net(c#)加密解密之Aes和Des
- Class.getResource()、ClassLoader.getResource()和this.class.getClassLoader()解析
- jQuery图片自动轮转动画特效
- 【转】别人整理的DP大全