volatile是线程安全的吗?它的底层原理如何实现的?

news2025/1/11 5:42:59

目录

一、线程安全三要素

二、可见性(强制刷新主内存)

三、有序性(禁止指令重排序)

四、总结


一、线程安全三要素

1)原子性

一个操作或者多个操作,要么全部执行成功,要么全部执行失败。满足原子性的操作,中途不可被

中断。

2)可见性

多个线程共同访问共享变量时,某个线程修改了此变量,其他线程能立即看到修改后的值。

3)有序性

        程序执行的顺序按照代码的先后顺序执行。(由于JMM模型中允许编译器和处理器为了效率,进行指令重排序的优化。指令重排序在单线程内表现为串行语义,在多线程中会表现为无序。那么多线程并发编程中,就要考虑如何在多线程环境下可以允许部分指令重排,又要保证有序性)

二、可见性(强制刷新主内存)

        当一个变量被volatile修饰后,JVM会把工作内存中的最新变量值强制刷新到主内存中,会导致其他线程中的缓存失效。这样,其他线程使用缓存时,发现本地工作内存中此变量失效,便会从主内存中获取,这样获取到的值就是最新的值,实现了线程可见性。

 

三、有序性(禁止指令重排序)

通过编译器在生成字节码时,在指令序列中添加“内存屏障”来禁止指令重排序的,从而保证了有序性。

四、总结

        volitile是通过强制刷新变量到主内存和内存屏障禁止指令重排序机制保证了有序性和变量可见性,因此volitile关键字可以保证有序性和变量可见性,但不能保证原子性,因此它不是线程安全的

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

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

相关文章

Kali-linux使用NVIDIA计算机统一设备架构(CUDA)

CUDA(Compute Unified Device Architecture)是一种由NVIDIA推出的通用并行计算架构,该架构使用GPU能够解决复杂的计算问题。它包含了CUDA指令集架构(ISA)及GPU内部的并行计算引擎。用户可以使用NVIDIA CUDA攻击使用哈希…

chatgpt赋能Python-python_pyusb

了解Python pyusb Python pyusb是Python的USB库,用于与USB设备进行通信。它提供了一个Pythonic的API,使得与USB设备进行通信变得非常简单。 什么是Python pyusb Python pyusb是一个Python的USB库,用于与USB设备进行通信。它是基于libusb的…

golang反向代理设置host不生效

文章目录 一、背景二、排查过程1、打印req.header2、tcpdump抓包分析(1)先抓取8080端口的请求,查看header差异(2)抓取目标域名请求体1)网关没有配置header,且proxy清空header2)网关配置header,且…

WPF MaterialDesign 初学项目实战(6):设计首页(2),设置样式触发器。已完结

原项目视频 WPF项目实战合集(2022终结版) 26P 源码地址 WPF项目源码 其他内容 WPF MaterialDesign 初学项目实战(0):github 项目Demo运行 WPF MaterialDesign 初学项目实战(1)首页搭建 WPF MaterialDesign 初学项目实战&…

微服务开发系列 第五篇:Redis

总概 A、技术栈 开发语言:Java 1.8数据库:MySQL、Redis、MongoDB、Elasticsearch微服务框架:Spring Cloud Alibaba微服务网关:Spring Cloud Gateway服务注册和配置中心:Nacos分布式事务:Seata链路追踪框架…

STL-常用算法(二.拷贝 替换 算术 集合)

开篇先附上STL-常用算法(一)的链接 STL-常用算法(一.遍历 查找 排序)_小梁今天敲代码了吗的博客-CSDN博客 目录 常用拷贝和替换算法: copy函数示例:(将v1容器中的元素复制给v2) replace函数示例&#…

06:冯诺依曼计算机

布尔代数:是现代电子计算机的数学和逻辑基础 ---------- 布尔代数与开关电路: ---------- 1945年:冯诺依曼101报告 硬件,操作系统软件、防病毒软件、办公软件、日程生活娱乐软件...... 冯诺依曼体系结构: 算术逻辑单…

chatgpt赋能Python-python_pu__

Python pu()函数介绍及使用方法 在Python编程中,pu()函数是一个常用的输出函数,可以将输出的内容打印到控制台上。在这篇文章中,我们将探讨pu()函数的具体用法以及它在Python编程中的实际应用。 什么是pu()函数 pu()函数是Python标准库中的…

Nacos、Eureka和Zookeeper有什么区别

Nacos、Eureka和Zookeeper都是服务注册中心,它们的主要功能是管理分布式系统中各个微服务实例的注册与发现。它们之间的主要区别在于: 1. 语言支持:Nacos是用Java语言开发的,Eureka是用Java语言开发的,Zookeeper则是用…

MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计

导航: 【Java笔记踩坑汇总】Java基础进阶JavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式牛客面试题 目录 8. 优先考虑覆盖索引 8.1 什么是覆盖索引? 8.1.0 概念 8.0.1 覆盖索引情况下,“不等于”…

chatgpt赋能Python-python_pythoncom

Python与Pythoncom:为您的SEO提供强大的支持 Python是一种经过广泛应用的高级编程语言,可用于多种应用程序的开发,包括爬虫、机器学习、数据分析、Web开发等等。而Pythoncom则是用于与Windows系统进行交互的Python模块,可以实现与…

小航编程题库机器人等级考试理论一级(2022年12月) (含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑 答案:C 第1题下列哪个是机器人?( ) A、aB、bC、cD、d 答案解析: 单选题…

小航编程题库机器人等级考试理论一级(2022年6月) (含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑 答案:D 第1题下列哪个选项属于机器人?(?) A、aB、bC、cD、d 答案解析&a…

MySQL第一章、MySQL安装与配置

目录 一、数据库介绍 1.1什么是数据库 1.2数据库分类 1.3数据库编程 1.4其他客户端 ​1.5MySQL总结 一、数据库介绍 1.1什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库? 文件保存数据有以下几个缺点: 文件的安全性问题文件不利于数…

chatgpt赋能Python-python_plup

Python Plug-In: 如何让你的Python代码更加高效? Python是一种高级编程语言,它的代码易于阅读和编写,通常是程序员的首选语言之一。但是,Python本身并不能满足所有需求,如果需要做一些复杂的任务,就需要使…

物联网应用的全球最低功耗无线芯片——芝麻芯片和大米天线

今天的内容是两则科技新闻,“用于物联网应用的全球最低功耗的无线芯片”,和“一款多频段微型芯片天线”。由于芯片的面积分别为1平方毫米,和21平方毫米,差不多是1粒芝麻和2粒大米的大小,故称为芝麻芯片和大米天线。 0…

easypan部署记录

文章目录 项目部署学习链接1.安装ffmpeglinux centos下安装ffmpeg的详细教程 2. springboot maven 多环境配置文件pom.xmlapplication.propertiesapplication-dev.propertiesapplication-prod.propertieslogback.xml 3. 配置nginx配置要点nginx配置 4. 启动项目5.访问 项目部署…

Java --- 云尚办公之权限管理模块

目录 一、权限管理 二、JWT 三、用户登录功能实现 四、用户登录后的信息 五、前端代码 六、spring-security 6.1、用户认证 6.2、用户授权 一、权限管理 粗粒度权限: 不同用户进入系统,因权限不同看到菜单不同 细粒度权限: 在一个页…

一、尚医通平台前端搭建

文章目录 一、尚医通平台前端搭建1、服务端渲染技术NUXT 二、首页实现1、公共处理1.1添加静态资源1.2 定义布局1.2.1 修改默认布局1.2.2 提取头文件1.2.3 提取尾文件1.2.4 默认布局引入头尾文件 2、首页引入2.1 引入首页静态页面2.2 首页数据分析 3、首页数据api接口3.1 医院分…

chatgpt赋能Python-python_penup怎么用

Python Penup - 内在交互性的有用工具 Python编程语言的流行一直与其灵活性和易于使用性息息相关。除此之外,Python还提供了大量的扩展和库,以满足各种编程需求。Penup是Python编程中一个非常有用的工具。 什么是Python Penup? Penup是Pyt…