并发前置知识一:线程基础

一、通用的线程生命周期:“五态模型”

IMG_0021 2.JPG

二、java线程有哪几种状态?

  1. New:创建完线程
  2. Runable:start(),这里的Runnable包含操作的系统的Running(运行状态)和Ready(上面的可运行状态)
  3. Blocked:等待一个排它锁,当java线程在调用阻塞api时(阻塞读取文件),是否会转到Blocked那?在jvm层面,java线程状态是不会发生变化,还是Runnable,因为jvm不关心操作系统调度,在jvm看来,等待cpu使用权(操作系统层面处于可运行状态)和等待i/o(操作系统此时处于休眠状态)没有区别,都是在等待某个资源,所以都归于Runnable状态。只有在等待获取隐式锁的时候,才会进入到阻塞状态。
  4. Waiting(无限期等待):等待其他线程显示的唤醒,否则不会被分配cpu时间片

image.png

  1. Time Waiting(限期等待):无需等待其他线程显式的唤醒,在一定时间之后会被系统自动唤醒

image.png
调用Thread.sleep方法会使得线程进入限期等待状态,常常用“使一个线程睡眠”描述
调用object.wait(xxx) 方法使得线程进入限期等待,常常用“挂起一个线程”描述

睡眠和挂起是一个动作,阻塞和等待是一个状态
阻塞和等待的区别在于,阻塞是一个被动的,它是在等待一个排它锁;等待(无论来自于sleep还是wait)是一个主动的,通过主动调用方法进入的

  1. Terminated: 1、线程正常执行完 2、线程被interrupt(这里是不建议使用stop的,如果用stop杀死线程的话,如果线程持有Lock锁,就不会调用unlock也就不会释放锁)。

另外:
Blocking、Waiting、Timed_Waiting这几种状态可以统一理解为休眠状态,当线程处于这几种状态时,线程是没有cpu的使用权的。

三、java线程之间状态切换是什么样的?

image.png

四、创建线程有哪些方式?

  1. 实现Runnable接口,然后传到Thread作为参数
  2. 实现Callable接口,然后将Callable接口传入到FutureTask中,再将FutureTask传入到Thread作为参数

image.png
Callable实现返回值,futureTask实现异步

  1. 直接继承Thread,重新run方法

五、interrupt方法

interrupt作为一种线程交互的方式,相比stop温柔多了。对于被interrupt的线程,如果想要接收通知,有以下2种方式:

  1. 异常

当线程处于 Waiting、Timed_Waiting状态时,如果其他线程调用线程A的interrupt方法,会使线程A返回到Runnable状态,同时线程A的代码会触发InterruptException异常。我们在调用wait、join、sleep方法,都能看的这些方法都会throws interruptException,这个异常的触发条件就是其他线程调用该线程的interrupt方法

当线程A处于Runnable,并且阻塞在java.io.channels.interruptiableChannel上时,如果其他线程调用A的interrupt方法,线程A会触发java.nio.channels.ClosedByinterruptException;而阻塞在java.nio.channels.Selector上时,如果其他线程调用线程A的interrupt方法,线程A会立即返回

  1. 主动检测

通过主动检测 thread.isInterupted方法,来判断自己是否被中断了

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

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

相关文章

vscode配置Todo Tree插件

一、在VSCode中安装插件Todo Tree ​​​​ 二、按下快捷键ctrlshiftP,输入setting.jspn 选择相应的配置范围,我们选择的是用户配置 Open User Settings(JSON),将以下代码插入其中。 {//todo-tree 标签配置从这里开始 标签兼容大小写字母(…

强化学习9——免模型预测算法介绍(蒙特卡洛方法和时步差分方法)

对于大部分情况来说,环境是未知的,也就是说状态转移概率未知,对于这种情况的算法称为免模型预测算法。免模型算法与环境不断交互学习,但是需要大量的运算。 蒙特卡洛方法 蒙特卡罗方法通过重复随机抽选,之后运用统计…

Phaser详解

Phaser是一个相对较新且功能强大的同步原语,它于Java 7中引入,用于协调并行任务的执行。与CyclicBarrier和CountDownLatch等传统的同步工具相比,Phaser提供了更灵活和更高级的功能,特别是在处理动态和可变的并行任务集合时。 1.P…

Python-基础语法

标识符 第一个字符必须是字母表中字母或下划线 _ 。标识符的其他的部分由字母、数字和下划线组成。标识符对大小写敏感。在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。 python保留字 保留字即关键字,我们不能把它们用…

MATLAB全局最优搜索函数:GlobalSearch函数

摘要:本文介绍了 GlobalSearch 函数的使用句式(一)、三个运行案例(二)、 GlobalSearch 函数的参数设置(三)、GlobalSearch 注意事项及必要说明(五)等内容。详细介绍如下&…

超维空间S2无人机使用说明书——11、使用3维激光雷达实现ROS无人机的精准定位

引言:在工程应用中,往往需要在没有GPS信号的情况下实现无人机的资助或者稳定的飞行。实现这个的基础就是定位,有了准确的定位信息,无人机才能稳定的飞行。性比较于视觉定位效果,目前3D雷达相对更加稳定,视觉…

FineBI实战项目一(18):每小时上架商品个数分析开发

点击新建组件,创建每小时上架商品个数组件。 选择线图,拖拽cnt(总数)到纵轴,拖拽hourStr到横轴。 修改横轴和纵轴的文字。 调节连线样式。 添加组件到仪表板。

【LeetCode】59. 螺旋矩阵II(中等)——代码随想录算法训练营Day02

题目链接:59. 螺旋矩阵II 题目描述 给你一个正整数 n ,生成一个包含 1 到 n 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]] 示例 …

攒机到底能省多少钱?

昨天弄好了攒机配置,今天要求配置一些更为实用的配置,只是作为一般办公,单位买进来的计算机都是联想,价格普遍在7000元以上,出于省钱和实用目的,今天搭配了一个组机方案。 上面的配置对付一般办公足够&…

基于JAVA的婚恋交友网站 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

Docker 有什么优势?

Docker作为一种流行的容器化技术,其优势所在可以从多个维度进行详细阐述。 ![&nbsp][nbsp] 统一环境 在容器化技术成熟之前,软件开发过程中环境部署是一个常见的问题, 开发到生产的整个软件交付流程往往受到多个因素的影响。 场景描述…

Magento1.9 浏览器提示该网页无法正常运作,将您重定向的次数过多

不久前部署了一个Magento网站,访问时却直接打不开: 该网页无法正常运作 xxx.com将您重定向的次数过多 若要解决此问题,请尝试清除 Cookie. ERR_TOO_MANY_REDIRECTS 我的网络架构是这样的: 网站部署在Nginx服务器上, 做了加密…

2 快速前端开发

CSS快速入门 1.CSS案例1.1 内容回顾1.2 案例:二级菜单1.2.1 划分区域1.2.2 搭建骨架1.2.3 Logo区域1.2.4 菜单部分 1.3 案例:顶部菜单 二级菜单小结 1.4 案例:推荐区域1.4.1 划分区域1.4.2 搭建骨架1.4.3 案例的实现小结 2. CSS知识点2.1 ho…

登录模块的实现

一.前期的准备工作 1.页面的布局 (1)表单的校验: 利用element-ui提供的文档绑定rules规则后实现校验 (2)跨域的配置 : 利用proxy代理来解决跨域的问题 (3)axios拦截器的配置 两个点:1. 在请求拦截的成功回调中,如果token,因为调用其它的接口需要token才能调取。 在请…

2024.1.11 Kafka 消息队列,shell命令,核心原理

目录 一 . 消息队列 二. Kafka 三 . 启动命令 四 . Kafka的Shell 命令 五 . Kafka的核心原理 1. Topic的分区和副本机制 2 . 消息存储机制 和 查询机制 3. Kafka中生产者数据分发策略 六 . Kafka 之所以具有高速的读写性能,主要有以下几个原因 七. 笔记…

如何让 QTableView控件五颜六色?

要让 QTableView 控件五颜六色,您可以使用 QStandardItemModel 的 setData() 方法为每个单元格设置不同的背景色。以下是一个示例: // 创建数据模型和设置表头略...// 设置单元格背景色 model->setData(model->index(0, 0), QColor(Qt::red), Qt:…

布隆过滤器 应用场景 优势 不足

布隆过滤器是一种空间效率很高的概率型数据结构,主要用于快速判断一个元素是否存在于一个集合中。它的主要应用场景、优势和不足如下: 应用场景 缓存:在缓存系统中,可以利用布隆过滤器快速判断某个数据是否存在于缓存中&#xf…

212. 单词搜索 II(字典树的另一种类型)

大致思路是: 根据words列表建立字典树,其中注意在单词末尾,将原来的isEnd变量换成存储这个单词的变量,方便存储到ans中,另外,字典树的字节点由原来的Trie数组变为hashmap,方便检索字母。 建立…

【AIGC】一组精美动物AI智能画法秘诀

如何使用AI绘画,从以下角度,依据表格内容梳理,表格如下: 外貌特征物种姿势特征描述场景风格技术描述小巧可爱幼小浣熊倚在桌子上具有人形特征中世纪酒馆电影风格照明8k分辨率细节精致毛茸茸手持咖啡杯Jean-Baptiste Monge的风格蓝…

一日难再晨及时当勉励 date

文章目录 Linux shell 获取更改系统时间默认输入显示时区世界协调时格式化日期更多信息 Linux shell 获取更改系统时间 … note:: 时光只解催人老,不信多情,长恨离亭,泪滴春衫酒易醒。 - 晏殊《采桑子时光只解催人老》date命令可以用来打印…