java并发-线程生命周期

文章目录

  • 前言
  • 状态图
  • 状态变化说明
  • 补充说明

前言

线程的生命周期指的是线程从创建出来到最终消亡的整个过程,以及过程中的状态变化。

状态图

以下图用mermaid语法绘制:

start()
竞争synchronized锁
Ojbect.wait()
Ojbect.notify()
thread.join(long)
时间到了
执行结束
new
RUNNABLE
BLOCKED
WAITING
TIMED_WAITING
TERMINATED

状态变化说明

java线程对象的所有状态存放在**Thread类的内部类(State)**中:

  1. 初始(NEW)
    1. 新创建了一个线程对象,但还没有调用start()方法
  2. 运行(RUNNABLE)
    1. Java线程中将就绪(READY) 和运行中(RUNNING) 两种状笼统的称为“可运行"
    2. 就绪(READY)
      1. 线程对象创建后,其他线程(比如main线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中并分配cpu使用权
    3. 运行中 (RUNNING)
      1. 就绪(READY)的线程获得了cpu 时间片,开始执行程序代码
  3. 阻塞(BLOCKED)
    1. 表示线程被锁阻塞时的状态。例如:多个线程竞争synchronized锁,有1个线程得到了锁,其他线程就是阻塞状态
  4. 等待(WAITING)
    1. 线程暂停运行,等待其他线程唤醒之后再继续执行。
    2. 进入方法,例如:thread.join(),Ojbect.wait(),LockSupport.park()方法
    3. 唤醒方法,例如:Object.notify()或者Object.notifyAll()
  5. 定时等待(TIMED_WAITING)
    1. 该状态不同于WAITING,它可以在指定的时间后自行恢复
    2. 进入方法,例如:Thread.sleep(long),Object.wait(long),thread.join(long),LockSupport.parkNanos,LockSupport.parkUntil
  6. 终止(TERMINATED)
    1. 表示该线程已经执行结束或者异常中断;
    2. 线程一旦终止,就不能再重启启动,否则报错(IllegalThreadStateException)

补充说明

在Thread类中过时的方法(因为存在线程安全问题,所以弃用了

  • void suspend():暂停当前线程
  • void resume():恢复当前线程
  • void stop():结束当前线程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日期类 - Java

知道怎么查,怎么用即可,不用每个方法都背 日期类 第一代日期类方法演示 第二代日期类方法演示 第三代日期类前面两代日期类的不足分析第三代日期类常见方法方法演示 第一代日期类 Date类:精确到毫秒,代表特定的瞬间SimpleDateFor…

Redis缓存——Spring Cache入门学习

Spring Cache 介绍 Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如: EHCacheCaffeineR…

程序员世界破破烂烂,低代码总在缝缝补补

在经历了十几年的发展后,前端开发变得越来越复杂,门槛也越来越高,要使用当下流行的 UI 组件库,你必须懂 npm、webpack、react/vue,必须熟悉 ES6 语法,最好还了解状态管理,比如 Redux&#xff0c…

【IPv6】IPv6协议

一、IPv6数据报格式 这是与v4报头的对比 1.8bit的版本保留了,v4版本就是4,v6就是6。 2.v6去除了v4的首部长度字段,因为v6的首部长是固定的40字节。 3.服务类型(Type of Service, ToS)和通信类型(Traffi…

Leetcode周赛374补题(3 / 3) - EA专场

不愧是EA的题&#xff0c;我最爱的模拟人生……好难&#xff0c;呜呜 目录 1、找出峰值 - 暴力枚举 2、需要添加的硬币的最小数量 - 思维 贪心 3、统计完全子字符串 - 滑窗 分组循环 1、找出峰值 - 暴力枚举 2951. 找出峰值 class Solution {public List<Integer> …

kubernetes监控GPA安装部署

本文在于指导如何对k8s的监控GPA(Grafana&#xff0c;prometheus以及alertmanager)进行安装部署。 1. 介绍 Prometheus 在真正部署Prometheus之前&#xff0c;应了解一下Prometheus的各个组件之间的关系及作用&#xff1a; 1&#xff09;MertricServer&#xff1a;是k8s集群…

Sentinel基础知识

Sentinel基础知识 资源 1、官方网址&#xff1a;https://sentinelguard.io/zh-cn/ 2、os-china: https://www.oschina.net/p/sentinel?hmsraladdin1e1 3、github: https://github.com/alibaba/Sentinel 一、软件简介 Sentinel 是面向分布式服务架构的高可用流量防护组件…

React 笔记 父子组件传值

React父子组件传值 react中的组件&#xff1a;解决HTML标签构建应用的不足。使用组件开发的好处&#xff1a;把公共的功能单独抽离成一个文件作为一个组件&#xff0c;哪里使用哪里引入。父子组件&#xff1a;组件的相互调用中&#xff0c;我们把调用者称为父组件&#xff0c;…

探究Logistic回归:用数学解释分类问题

文章目录 前言回归和分类Logistic回归线性回归Sigmoid函数把回归变成分类Logistic回归算法的数学推导Sigmoid函数与其他激活函数的比较 Logistic回归实例1. 数据预处理2. 模型定义3. 训练模型4. 结果可视化 结语 前言 当谈论当论及机器学习中的回归和分类问题时&#xff0c;很…

浅谈Python+requests+pytest接口自动化测试框架的搭建

框架的设计思路 首先要明确进行接口自动化需要的步骤&#xff0c;如下图所示&#xff1a; ​然后逐步拆解需要完成的工作&#xff1a; 1&#xff09;了解分析需求&#xff1a;了解接口要实现的功能 2&#xff09;数据准备&#xff1a;根据开发文档确定接口的基本情况&#x…

File.separator

File.separator代表系统默认文件目录分隔符&#xff0c;即我们所说的“斜线”。 在 windows 中 文件文件分隔符 用 ’ \ ’ 或者 ’ / ’ 都可以在 Linux 中&#xff0c;系统中分隔符为“/”&#xff0c;不识别 ’ \ ’ 例如&#xff1a; //在temp目录下建立一个test.txt文件…

Python + Appium框架原生代码实现App自动化测试

Step1&#xff1a;首先介绍下pythonappium的框架结构 如下截图所示 . (1)&#xff1a;apk目录主要放置待测app的apk资源&#xff1b; (2)&#xff1a;config目录主要放置配置文件信息&#xff0c;包含&#xff1a;数据库连接配置、UI自动化脚本中所需的页面元素信息及app启…

(C语言)判定一个字符串是否是另一个字符串的子串,若是则返回子串在主串中的位置。

要求&#xff1a; &#xff08;1&#xff09;在主函数中输入两个字符串&#xff0c;调用子函数cmpsubstr()判断&#xff0c;并在主函数输出结果。 &#xff08;2&#xff09;子函数的返回值为-1表示未找到&#xff0c;否则返回子串的位置&#xff08;起始下标&#xff09;。 …

Shell数组函数:数组(一)

一、数组简介&#xff1a; 变量&#xff1a;用一个固定的字符串&#xff0c;代替一个不固定字符串。数组&#xff1a;用一个固定的字符串&#xff0c;代替多个不固定字符串。 二、类型 普通数组&#xff1a;只能使用整数作为数组索引关联数组&#xff1a;可以使用字符串作为…

多表操作、其他字段和字段参数、django与ajax(回顾)

多表操作 1 基于对象的跨表查 子查询----》执行了两句sql&#xff0c;没有连表操作 2 基于双下滑线的连表查 一次查询&#xff0c;连表操作 3 正向和反向 放在ForeignKey,OneToOneField,ManyToManyField的-related_namebooks&#xff1a;双下滑线连表查询&#xff0c;反向…

Redis Hash数据类型

Redis Hash数据类型 几乎所有的主流编程语言都提供了哈希(hash)类型&#xff0c;它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中&#xff0c;哈希类型是指值本身又是一个键值对结构&#xff0c;形如key “key”&#xff0c;value {ffield1, value1 }, … {fieldN…

LoadBalancer将服务暴露到外部实现负载均衡purelb-layer2模式配置介绍

目录 一.purelb简介 1.简介 2.purelb的layer2工作模式特点 二.layer2的配置演示 1.首先准备ipvs和arp配置环境 2.purelb部署开始 &#xff08;1&#xff09;下载purelb-complete.yaml文件并应用 &#xff08;2&#xff09;查看该有的资源是否创建完成并运行 &#xff…

树莓派外接上显示器以后一直黑屏无画面显示

一般遇到这种情况都是因为没有强制支持热插拔引起的&#xff0c;先断电树莓派&#xff0c;确保显示器与树莓派连接正常&#xff0c;然后上电就可以正常显示了。 如果想要支持热插拔&#xff0c;可以修改配置文件。 sudo nano /boot/config.txt 修改如下配置 hdmi_force_hotpl…

GCN,GraphSAGE 到底在训练什么呢?

根据DGL 来做的&#xff0c;按照DGL 实现来讲述 1. GCN Cora 训练代码&#xff1a; import osos.environ["DGLBACKEND"] "pytorch" import dgl import dgl.data import torch import torch.nn as nn import torch.nn.functional as F from dgl.nn.pytorc…

Linux系统安装Python3环境

1、默认情况下&#xff0c;Linux会自带安装Python&#xff0c;可以运行python --version命令查看&#xff0c;如图&#xff1a; 我们看到Linux中已经自带了Python2.7.5。再次运行python命令后就可以使用python命令窗口了&#xff08;CtrlD退出python命令窗口&#xff09;。 2…