java线程状态与操作系统线程状态的关系
清楚的理解和认知线程状态是java多线程的基础,多线程本质上其实就是管理多个线程的状态,以期在保证线程安全的情况下获得最佳的运行效率(发挥cpu的最佳效能)
首先列举几个容易混淆的线程状态问题文末进行解答:
1Java线程有几种状态
2.线程sleep之后处于什么状态
3.A线程被sychnolozy锁阻塞了,B线程被lock锁阻塞了 AB两个线程是否处于相同状态是什么状态
4.当java线程发生IO阻塞时 线程处于什么状态:
5.java线程和操作系统线程状态是如何对应的:
java线程状态:
- 初始状态
实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了初始状态。
2可运行状态
2.1. 就绪状态
就绪状态只是说你资格运行,调度程序没有挑选到你,你就永远是就绪状态。
调用线程的start()方法,此线程进入就绪状态。
当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,某个线程拿到对象锁,这些线程也将进入就绪状态。
当前线程时间片用完了,调用当前线程的yield()方法,当前线程进入就绪状态。
锁池里的线程拿到对象锁后,进入就绪状态。
2.2. 运行中状态
线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一一种方式。
3. 阻塞状态
阻塞状态是线程阻塞在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态。
4. 等待
处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒,否则会处于无限期等待的状态。
5. 超时等待
处于这种状态的线程不会被分配CPU执行时间,不过无须无限期等待被其他线程显示地唤醒,在达到一定时间后它们会自动唤醒。
6. 终止状态
当线程的run()方法完成时,或者主线程的main()方法完成时,我们就认为它终止了。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦终止了,就不能复生。
在一个终止的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。
操作系统线程状态:
操作系统中的线程除去new和terminated状态,一个线程真实存在的状态,只有:
ready :表示线程已经被创建,正在等待系统调度分配CPU使用权。
running:表示线程获得了CPU使用权,正在进行运算
waiting:表示线程等待(或者说挂起),让出CPU资源给其他线程使用
为什么没有new和terminated状态?是因为这两种状态实际上并不存在于线程运行中,所以也没什么实际讨论的意义。
操作系统线程与java线程状态的对应:
问题解答:
1Java线程有几种状态: 六种而不是五种容易漏掉TIMEWAITING状态,操作系统线程状态可以说是五种也可以说三种(排除新建和终止)
2.线程sleep之后处于什么状态:timewaiting
3.A线程被sychnolozy锁阻塞了,B线程被lock锁阻塞了 AB两个线程是否处于相同状态是什么状态:
sych锁是blocked状态,blocked状态只能从sych锁进入无其他方式
lock锁的阻塞是waiting或timewaiting状态
4.当java线程发生IO阻塞时 线程处于什么状态:
rannable状态,当io阻塞时一定处于操作系统线程状态的waiting状态,操作系统的waiting状态的定义是:表示线程等待(或者说挂起),让出CPU资源给其他线程使用。java线程种 waiting、timewaiting、blocked都必然处于操作系统线程waiting状态、rannable则有可能处于waiting状态。IO阻塞在java的定义中就是rannable状态只不过让出了cpu资源。
5.java线程和操作系统线程状态是如何对应的:
见上图表格
Java线程状态中blocked、waiting、time waiting都是waiting状态,runnable线程在没有获得cpu资源的时候也是waiting状态 rannable状态包含了操作系统的ready和running状态
java线程状态与操作系统线程状态的关系相关推荐
- java并发编程第一课 线程的创建、停止和状态变更
开篇词: 由点及面,搭建你的 Java 并发知识网 你好,欢迎学习<Java 并发编程核心 78 讲>,我是讲师星星,一线互联网公司资深研发工程师,参与过集团内多个重点项目的设计与开发. ...
- java 线程的销毁_Java 线程(1)- 创建与销毁
Java 采用 thread-per-task 的线程模型,即一个任务(一段代码)对应一个 Java 线程(thread),而一个 Java 线程对应一个操作系统线程,所以了解一些操作系统进程的管理知 ...
- 【Java线程】“打工人”初识线程池及自定义线程池实战
目录 理论 原理 线程池创建 工作流程图 拒绝策略 参数设置 四种线程池 实战 理论 聊一下为什么要使用线程池? 程序的运行本质,就是通过使用系统资源(CPU.内存.网络.磁盘等等)来完成信息的处理, ...
- JAVA线程六种状态_Java:线程的六种状态及转化
多线程概述及创建方式 Java:线程的六种状态及转化 关于线程的生命周期,网上书上说法不一,难以统一,本篇做一个总结: java.lang.Thread.State枚举类中定义了六种线程的状态,可以调 ...
- java threadstatus_Thread之一:线程生命周期及六种状态
一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程各重要知识点.掌握了上图中的各知识点,Java中的多线程也就基本上掌 ...
- Java多线程系列(二):线程的五大状态,以及线程之间的通信与协作
在Java面试的时候,经常会问到Java并发编程相关的多线程.线程池.线程锁.线程通信等面试必考点,比如: Java并发编程系列:Java线程池的使用方式,核心运行原理.以及注意事项 Java并发编程 ...
- Java并发编程(01):线程的创建方式,状态周期管理
本文源码:GitHub·点这里 || GitEE·点这里 一.并发编程简介 1.基础概念 程序 与计算机系统操作有关的计算机程序.规程.规则,以及可能有的文件.文档及数据. 进程 进程是计算机中的程序 ...
- java多线程学习一、线程介绍、线程创建的3种方式、lambda创建方式、线程状态、线程示例:12306买票和银行取钱
文章目录 前言 一.线程简介 1.概述 2.进程.线程 区别 在这里插入图片描述 3. 核心概念 二. 线程创建 1.概述 2. 第一种方式继承Thread 1) 继承Thread 2) 示例:下载图 ...
- 【Java 并发编程】线程简介 ( 并发类型 | 线程状态 | CPU 数据缓存 )
文章目录 一.并发类型 二.线程状态 三.CPU 数据缓存 一.并发类型 并发类型 : Thread Runnable Future ThreadPool 其中 Runnable , ThreadPo ...
- Java线程详解(4)-线程状态的转换
一.线程状态 线程的状态转换是线程控制的基础.线程状态总的可以分为五大状态.用一个图来描述如下: 1.新状态:线程对象已经创建,还没有在其上调用start()方法. 2.可运行状态:当线程有资格运行, ...
最新文章
- Makefile笔记之二------make的递归执行
- Java核心技术笔记 语言基础
- ajax post传送数组以及java后台接收数组
- C++容器遍历时删除元素
- 【答阿里寒冬面试题】呵呵,大神的面试题就是好!
- Nginx反向代理服务器获取不到端口的问题的解决办法
- mifare classic 2.2.3中文_Adobe Lightroom Classic CC 2019 v8.4.1 中文完整直装版
- Windows -- ThinkPad E470 win10-64bit显示问题和声音播放问题
- dtft性质及证明_N第二章离散时间傅立叶变换(DTFT).ppt
- 英语计算机简历模板,计算机研究生英文简历模板
- 图结构 计算机视觉,探索图结构数据上的数据增强
- Tool-图片压缩-腾讯智图:腾讯智图
- 中国电话区号(CSV)
- mysql8 update语句 where块的in方法内子查询不报错
- onload事件和ready方法的区别
- Excel冻结多行多列
- Saber 2016安装过程分享
- pyecharts官网
- PWM、SPWM、SVPWM的个人理解
- matlab分数约分,分母
热门文章
- 工资管理系统数据库设计
- 【33】t-SNE原理介绍与对手写数字MNIST的可视化结果
- CentOS 7 - Securing OpenSSH(二)
- nifi集群_【NIFI】 Apache NiFI 集群搭建
- 【书记舞】MMD动作+镜头+配音下载
- 【千本樱】mmd镜头+动作打包下载
- 深度学习在视频动作识别中的应用
- java必记单词_70个学习JAVA必背的英语单词,了解下
- 论文阅读:More Data, More Relations, More Context and More Openness:A Review and Outlook for RE关系抽取的回顾与展望
- example包下载