Java的可见性和有序性你真的懂吗

一、可见性(Visibility)
1.指的是:一个线程对变量的修改可被其他线程看见。
2.Java提供了volatile、synchronized、final、Lock等来保证可见性。
3.volatile:volatile修饰的变量在每次访问时都会从主内存中读取,并且在修改后会立即刷新回主内存。
4.synchronized:当线程进入一个synchronized块时,它首先会获取该对象的锁,然后清空自己的工作内存,从主内存中加载该对象的最新值。当线程退出synchronized块时,它会将自己工作内存中的变量值刷新回主内存中。
5.final:被 final 修饰的字段在构造器中一旦完成,并且构造器没有把this的引用传递出去( this 引用逃逸时,其他线程有可能通过这个引用访问到"初始化了一半"的对象),那final字段对其他线程就是可见的。


二、有序性(Ordering)
1.指的是:程序的执行顺序按照代码的先后顺序执行。
但在并发编程中,指令重排可能会使程序的执行顺序与代码的书写顺序不一致。
2.Java提供了volatile、synchronized、Lock、happens-before等来保证有序性。
3.volatile:volatile变量的读写操作前后会插入相应的内存屏障,防止指令重排序。
4.synchronized:synchronized块或方法的同步机制可以保证同步块内的代码执行顺序。
一个变量在同一时刻只允许一个线程对其进行 lock 操作。
5.happens-before:Java内存模型(JMM,Java Memory Model)定义了哪些操作必须在其他操作之前发生,哪些操作必须按照特定的顺序执行。
6.如果在本线程内观察,所有操作都是有序的(线程内表现为串行的语义);如果在另一个线程中观察本线程,所有操作都是无序的(指令重排现象和工作内存与主内存同步延迟现象)。
 


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

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

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

相关文章

intel深度相机D455的使用

一、D455介绍 Intel RealSense D455 是RealSense D400系列的一部分,这个系列的设备以其高精度和可靠性而闻名。D455相比于之前的型号(如D415和D435),提供了更远的感知范围和更高的精度。 二、使用代码 我们先定义一下相关的函数…

鸿蒙OS初识

学习官网:https://www.harmonyos.com/cn/develop 准备 注册,安装软件(node:12, DevEco Studio): https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415#ZH-CN_TOP…

MFC3d立体按钮制作

1、本程序基于前期我的博客文章MFC用CButtonST类实现图片透明按钮(免费源码下载) 2、添加CeXDib.cpp CeXDib.h ShadeButtonST.cpp ShadeButtonST.h到项目文件夹下,和FileView中如图。 3、在ButtonShadeDlg.h中添加代码 #include "ShadeButtonST.h" #in…

4分之1外螺纹怎么编程:挑战与策略解析

4分之1外螺纹怎么编程:挑战与策略解析 在机械制造领域,螺纹编程是一项至关重要的技术任务。当面对如4分之1外螺纹这样的具体需求时,编程人员需要综合运用专业知识与编程技巧,以确保螺纹的精确度和生产效率。本文将围绕四个方面、…

springboot595基于Java的大学生迎新系统-手把手调试搭建

springboot595基于Java的大学生迎新系统-手把手调试搭建 springboot595基于Java的大学生迎新系统-手把手调试搭建

Qml开发的两种方法

一.Qml开发的两种方法 1.Qt Creator 开发,手动编写qml代码 这种方法开发很方便,适合对qml语言非常熟悉的开发人员。 2.用Qt Design Studio 设计qml界面 这种方法更适合对qml不太熟悉的人,可以实现qml控件的拖拉拽,类似与widget界面开发&…

C#语言进阶(二)—事件 第二篇(.net标准事件模型)

总目录 C# 语法总目录 系列链接 C#语言进阶(二) 事件 第一篇(发布订阅模式) C#语言进阶(二) 事件 第二篇(.net标准事件模型) C#语言进阶(二) 事件 第二篇(事件访问器) 事件 第二篇目录 事件 第二篇2. .net标准事件模型 事件 第二篇 2. .net标准事件模型 标准事件模型…

【原型模式】详解

一.概念 原型模式是一种创建型设计模式,它的主要思想是通过复制现有对象来创建新对象,而不是通过实例化一个类来创建。在原型模式中,我们称被复制的对象为原型(Prototype),新创建的对象为克隆体&#xff0…

用户画像知识点补充——多数据源

引入 针对用户画像项目来说(产品)必须要支持从多种数据源加载业务数据,构建用户标签。 在之前的标签模型开发中,主要是为了简化开发复杂度,业务数据统一存储到HBase表中。 数据源包含如下几个方面: 存储H…

【应用层】 DNS 域名协议解析

文章目录 DNS(Domain Name System)出现及演化 ⏳DNS 概括🔍DNS定义DNS 作用 DNS工作原理⚙️域名解析DNS解析的详细工作流程 DNS域名解析方式🔄静态DNS域名解析动态DNS域名解析 DNS域名解析过程的深入分析 🧐递归查询迭代查询 公共DNS服务器的…

Tailwindcss Flex 布局相关的样式类及其实战案例

007 Flex布局相关的样式 flex-basics 相关的样式类 ClassPropertiesbasis-0flex-basis: 0px;basis-1flex-basis: 0.25rem; /* 4px */basis-2flex-basis: 0.5rem; /* 8px */basis-3flex-basis: 0.75rem; /* 12px */basis-4flex-basis: 1rem; /* 16px */basis-5flex-basis: 1.2…

docker-comopse容器因依懒关系无启动解决方法

1、确认出影响项目开机自启的容器 通docker logs -f 确认容器是否正常docker restart 重启容器,如果项目正常,把异常容器加入rc.local中,待开机一定时间后,重启此容器。 2、在rc.local中添加延时重启对应容器 #vim /etc/rc.loc…

STC8增强型单片机进阶开发--LED呼吸灯(PWM)

知不足而奋进 望远山而前行 文章目录 目录 文章目录 前言 目标 内容 PWM基础概念 STC8H芯片 PWMA应用 PWM配置详解 周期 占空比 模式 使能PWM 引脚配置 EAXSFR扩展寄存器 总结 前言 学习PWM(脉宽调制)是探索数字信号转模拟信号的重要一步,尤…

ad18学习笔记21:焊盘设置Paste Mask Expansion(锡膏层延伸)

在pcb上放置焊盘的时候,可以对焊盘进行设置,可以用默认的规则,可以用自定义的规则,网上很少看到自定义的规则怎么用。 参考了官方的说明文档,我只是稍微补充了一下 paste mask与solder mask有哪些区别_paste mask与s…

文件上传之使用一个属性接收多个文件

在开发过程中&#xff0c;可能遇到这样的业务&#xff1a;文件上传时个数不定&#xff0c;这样我们不能枚举出所有的文件name&#xff0c;这种情况下我们可以使用一个name将所有的文件接收下来&#xff1b; html代码 <!DOCTYPE html> <html lang"en"> …

终于更新了!时隔一年niushop多商户b2b2c的新补丁v5.0.2终于发布了,一起看看有啥新变化

注意这是最新版的V5.02_多商户V5.0.2版本更新说明 瞧瞧更新了什么内容&#xff0c; 优化功能 优化手机号、身份证等常用验证规则&#xff0c;全局化处理优化商品列表接口查询速度 修复功能修复系统内部分图片上传功能调用接口跨端口问题修复总后台和商家后台订单管理搜索标签在…

Ubuntu上安装Conda步骤

按照官方文档下载并安装miniconda脚本 https://docs.anaconda.com/free/miniconda/ mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda…

一文彻底讲透 PyTorch

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

JQC-3FF-S-Z 继电器模块使用(arduino)

前言 继电器模块可以控制电流的接通和非接通状态&#xff0c;和开关一样。实际上是用小电流去控制大电流运作的一种“自动开关” 本文只是简单使用继电器模块做一个 led 点亮和熄灭的案例&#xff0c;结合案例可以和 nodemcu 等板子结合做出远程控制开关。 材料准备 杜邦线…

无限可能LangChain——构建一个简单的LLM应用程序

在本快速入门中&#xff0c;我们将向您展示如何构建一个简单的LLM应用程序。该应用程序将文本从英语翻译成另一种语言。这是一个相对简单的LLM应用程序——它只是一个LLM调用加上一些提示。尽管如此&#xff0c;这仍然是开始使用LangChain的好方法——只需一些提示和一个LLM调用…