线程安全问题

线程安全

简单来说,在多个线程访问某个方法或者对象的时候,不管通过任何的方式调用以及线程如何去交替执行。在程序中不做任何同步干预操作的情况下,这个方法或者对象的执行/修改都能按照预期的结果来反馈,那么这个类就是线程安全的。

线程安全问题

实际上,线程安全问题的具体表现体现在三个方面,原子性、有序性、可见性。

原子性

原子性呢,是指当一个线程执行一系列程序指令操作的时候,它应该是不可中断的,因为一旦出现中断,站在多线程的视角来看,这一系列的程序指令会出现前后执行结果不一致的问题。 这个和数据库里面的原子性是一样的,简单来说就是一段程序只能由一个线程完整的执行完成,而不能存在多个线程干扰。 CPU 的上下文切换,是导致原子性问题的核心,而 JVM 里面提供了 Synchronized 关键字来解决原子性问题。

可见性 

可见性,就是说在多线程环境下,由于读和写是发生在不同的线程里面,有可能出现某个线程对共享变量的修改,对其他线程不是实时可见的。 导致可见性问题的原因有很多,比如 CPU 的高速缓存、CPU 的指令重排序、编译器的 指令重排序。

有序性

有序性,指的是程序编写的指令顺序和最终 CPU 运行的指令顺序可能出现不一致的现象,这种现象也可以称为指令重排序,所以有序性也会导致可见性问题。可见性和有序性可以通过 JVM 里面提供了一个 Volatile 关键字来解决。

总结

在我看来,导致有序性、原子性、可见性问题的本质,是计算机工程师为了最大化提升CPU 利用率导致的。比如为了提升 CPU 利用率,设计了三级缓存、设计了 StoreBuffer、设计了缓存行这种预读机制、在操作系统里面,设计了线程模型、在编译器里面,设计了编译器的深度优化机制。

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

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

相关文章

Cross-modal Variational Alignment of Latent Spaces

方法 潜空间LS 辅助信息 作者未公布代码

【数据结构】插入排序

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈数据结构 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 直接插入、希尔排序 1. 什么是排序2…

GPT做SQL查询引擎的自然语言

目录 面向企业查询的生成式人工智能 步骤1:将示例数据转换为单字符字符串 步骤2:为大型语言模型(LM)创建提示符 步骤3:将数据发送到OpenAI的API 步骤4:执行GPT返回的SQL代码的结果 步骤5(可选)&#…

shell算数运算指令、

1.shell算数运算的指令 (( )) $[ ] let expr expr的字符串运算 例子: 2.shell的if分支结构

第15届蓝桥杯Scratch选拔赛中级(STEMA)真题2023年8月

第15届蓝桥杯Scratch选拔赛中级(STEMA)真题2023年8月 一、单选题 第 1 题 单选题 点击以下积木块,生成的随机数是一个( )。 A.整数 B.小数 C.整数或小数 D.以上都不对 第 2 题 单选题 运行以下程序&#xff0…

【Docker】github Actions自动构建

通过github的Actions 实现代码push仓库后自动构建容器并发布到DockerHub. 创建项目 首先我们创建一个项目,这里我就用Vue项目进行演示. npm init vuelatest Actions-demo-swback进去项目,按照提示执行 npm install npm run dev 启动项目. 首先保证项目的正常启动…

数据库的概念和sql语句

数据:数字信息 据:就是属性 对一系列对象的具体属性的描述的集合 数据库:数据库就是用来组织(各个数据之间是有关联。是按照规则组织起来的),存储和管理(对数据的增删改查)的仓库 …

Android 和 iOS APP 测试的那些区别

目前市面上主流的移动操作系统就是 Android 和 iOS 两种,移动端测试本身就跟 Web 应用测试有自己的专项测试,比如安装、卸载、升级、消息推送、网络类型测试、弱网测试、中断测试、兼容性测试等都是区别于 Web 应用需要关注的测试领域。 那么&#xff0…

汽车行驶性能的主观评价方法(1)-底盘校准方法

底盘校准的目的是,从行驶性能和行驶舒适性两个方面进行协调,从而优化行驶动力学特性。为了达到这一目标,工程人员早在设计阶段,就对大多数对行驶动力性有重要意义的部件提出了要求。这些要求不仅与底盘的组件有关,还必…

零资源的大语言模型幻觉预防

零资源的大语言模型幻觉预防 摘要1 引言2 相关工作2.1 幻觉检测和纠正方法2.2 幻觉检测数据集 3 方法论3.1 概念提取3.2 概念猜测3.2.1 概念解释3.2.2 概念推理 3.3 聚合3.3.1 概念频率分数3.3.2 加权聚合 4 实验5 总结 摘要 大语言模型(LLMs)在各个领域…

796. 子矩阵的和(二维前缀和)

题目: 796. 子矩阵的和 - AcWing题库 思路: 1.暴力搜索(搜索时间复杂度为O(n2),很多时候会超时) 2. 前缀和(左上角(二维)前缀和):本题特殊在不是直接求前…

730. 机器人跳跃问题--二分

题目: 730. 机器人跳跃问题 - AcWing题库 思路: 二分 1.当起始能量E大于最大建筑高度1e5 时,E的能量在整个条约过程中全程递增,则大于E的初始能量也必然成立(满足二段性)。故最小初始能量范围为[0,1e5]&a…

研发效能(DevOps)职业技术认证-第六期开班啦丨IDCF

本证书是由国家工业和信息化部教育与考试中心颁发的职业技术证书,也是国内首个《研发效能(DevOps)工程师职业技术认证》。该《认证》对研发效能(DevOps)工程师的职业技术分为初级、中级、高级三个专业等级。 IDCF社区…

[SQL开发笔记]UPDATE 语句:更新表中的记录

一、功能描述: UPDATE 语句:用于更新表中的记录 二、UPDATE 语句语法详解: UPDATE 语法 UPDATE table_nameSET column1value1,column2value2,...WHERE some_columnsome_value; 参数说明: 1.table_name:要修改的表…

淘宝API接口获取商品信息,订单管理,库存管理,数据分析

在淘宝开放平台中,每个API接口都有相应的文档说明和授权机制,以确保数据的安全性和可靠性。开发者可以根据自己的需求选择相应的API接口,并根据文档说明进行调用和使用。 淘宝开放平台API接口是一套REST方式的开放应用程序编程接口&…

CMake aux_source_directory 学习

如下&#xff0c;prj是空文件夹&#xff1b; add.h; #include <iostream>using namespace std;int add1(int a, int b); num.h; int num1100; int num2301; add.cpp&#xff1b; #include "add.h"int add1(int i, int j) {return i j; } main.cpp&#x…

【VUE】ElementPlus之动态主题色调切换(Vue3 + Element Plus+Scss + Pinia)

前言 关于ElementPlus的基础主题色自定义可以参阅《【VUE】ElementPlus之自定义主题样式和命名空间》 有了上面基础的了解&#xff0c;我们知道ElementPlus的主题色调是基于CSS3变量特性进行全局控制的&#xff0c; 那么接下来我们也基于CSS3变量来实现主题色调的动态切换效果&…

GCC、g++、gcc的关系

GCC、g、gcc的关系 引言 VsCode中对编译环境进行配置的时选择编译器时发现有多种不同的编译器 GNU计划和GCC GNU的全称 GNU’s Not UNIX GNU是一个计划 Q:为什么会有这个计划 因为当时的Unix开始收费和商业闭源,有人觉得不爽→ 想要自己开发和Unix类似的→GNU计划 GUN计划目…

PgSQL-执行器机制-Unique算子

PgSQL-执行器机制-Unique算子 PgSQL中输出去重的元组有多种方法&#xff0c;比如通过HashAgg或者GroupAgg。这里我们介绍第三种方法&#xff0c;通过Unique算子来完成这个功能。当然语句上可以是&#xff1a;select distinct(id1) from t; 1、ExecUnique 执行器执行算子的函数都…

排序算法-堆积树排序法(HeapSort)

目录 排序算法-堆积树排序法&#xff08;HeapSort&#xff09; 1、说明 2、算法分析 3、C代码 排序算法-堆积树排序法&#xff08;HeapSort&#xff09; 1、说明 堆积树排序法是选择排序法的改进版&#xff0c;可以减少在选择排序法中的比较次数&#xff0c;进而减少排序…