java并发编程之线程的生命周期详解
java线程从创建到销毁,一共会有6个状态,不一定都经历,有可能只经历部分:
- NEW:初始状态,线程被创建,但是还没有调用start方法。
- RUNNABLED:运行状态,java线程把操作系统中的就绪和运行两种状态统一称为“运行中”。就绪状态说明该线程有被执行的资格,等待OS调度,运行状态说明该线程获得了CPU时间片,在执行中。
- BLOCKED:阻塞状态,表示线程进入等待状态,也就是线程因为某种原因放弃了CPU的使用权。
- WAITING:等待状态。该状态下的线程不会被CPU分配时间片,要么被显式唤醒,要么一值处于该状态。
- TIME_WAITING:超时等待状态,该状态下的线程也不会被CPU分配时间片,但是,他有超时时间,时间一过自动唤醒。
- TERMINATED:终止状态,表示当前线程执行完毕。run方法被执行完成。线程一旦终止就不能复生,试图启动一个终止的线程,会抛出java.lang.IllegalThreadStateException异常。
线程的生命周期如下图:
说明:
- 图中涉及到的api之后会花另外的篇幅详解。
- 当线程从其他的状态进入RUNNABLED状态时,是首先进入到READY就绪态等待OS的调度才开始执行的。
- 图中的每个状态之间通过相应方法的调用会改变到另一个状态。
java并发编程之线程的生命周期详解相关推荐
- Java并发编程:线程的生命周期是个怎样的过程?
前言 在日常开发过程中,如果我们需要执行一些比较耗时的程序的话,一般来说都是开启一个新线程,把耗时的代码放在线程里,然后开启线程执行.但线程是会耗费系统资源的,如果有多个线程同时运行,互相之间抢占系统 ...
- Java并发编程:线程封闭和ThreadLocal详解
什么是线程封闭 当访问共享变量时,往往需要加锁来保证数据同步.一种避免使用同步的方式就是不共享数据.如果仅在单线程中访问数据,就不需要同步了.这种技术称为线程封闭.在Java语言中,提供了一些类库和机 ...
- Java并发编程系列之CountDownLatch用法及详解
背景 前几天一个同事问我,对这个CountDownLatch有没有了解想问一些问题,当时我一脸懵逼,不知道如何回答.今天赶紧抽空好好补补.不得不说Doug Lea大师真的很牛,设计出如此好的类. 1. ...
- 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )
文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...
- 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )
文章目录 前言 一.线程池示例 二.newCachedThreadPool 线程池示例 三.newFixedThreadPool 线程池示例 三.newSingleThreadExecutor 线程池 ...
- (转)Java并发编程:线程池的使用
背景:线程池在面试时候经常遇到,反复出现的问题就是理解不深入,不能做到游刃有余.所以这篇博客是要深入总结线程池的使用. ThreadPoolExecutor的继承关系 线程池的原理 1.线程池状态(4 ...
- java并发编程与线程安全
2019独角兽企业重金招聘Python工程师标准>>> 什么是线程安全 如果对象的状态变量(对象的实例域.静态域)具有可变性,那么当该对象被多个线程共享时就的考虑线程安全性的问题,否 ...
- 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- JAVA并发编程3_线程同步之synchronized关键字
在上一篇博客里讲解了JAVA的线程的内存模型,见:JAVA并发编程2_线程安全&内存模型,接着上一篇提到的问题解决多线程共享资源的情况下的线程安全问题. 不安全线程分析 public clas ...
最新文章
- 描述关系型数据库中的三种关系
- 知识图谱( 知识图谱管理)
- 记录工作中常用的CSS3
- 搭建springboot环境
- 服务器安全之iptables iptables
- 打卡学习 | Redis原理应用-线程IO模型
- python 获取当前目录,上级目录,上上级目录,N级目录
- 阿里云数据库8月刊:国内首款Cloud Native自研数据库POLARDB精彩亮相VLDB!
- 基于CameraLink的串行口通讯
- 数据库系统是采用数据库技术的计算机系统,1数据库系统是采用了数据库技术的计算机系统.doc...
- 浏览器与WEB服务器的网络协议
- 异常,Map,File
- Android Uri的几种使用方法,分享共同学习
- 百度地图 自定义结果面板+分页+图层标注(标注点+搜索)
- 什么软件测试血压最准确,App Store 上的“血压准-校准血压计血压测量更准确”...
- 墙裂安利!用腾讯云AI语音合成打造自己的第一本有声书
- Ubuntu 16.04 下 旋转显示器屏幕 竖屏显示
- 单片机中断实验2 EX0
- 使用pgpool-ii 搭建postgresql 高可用、负载均衡架构
- 怎么画出好的架构图,架构师必备。。
热门文章
- 【BZOJ1901】Dynamic Rankings,树状数组套主席树
- 杨辉三角、组合数 性质的探究
- 【英语学习】【WOTD】rowel 释义/词源/示例
- sap idoc生成文件传到别的服务器,IDOC 实例详解
- barbuttonitem 文字换行_ios开发 常用代码整理
- 怎样将树的中序遍历的数输入到一个数组中_LeetCode 530.二叉搜索树的最小绝对差
- diskgenius 单文件_电脑数据恢复及分区管理软件DiskGenius 英文专业版
- 重要性采样(Importance Sampling)简介和简单样例实现
- css贝塞尔曲线 多个点_贝塞尔曲线实践
- java代码调用python_java调用python代码-阿里云开发者社区