volatile,最轻量的同步机制

        

目录

一、volatile

二、如何使用?

三、volatile关键字能代替synchronized关键字吗?

四、总结:


        还是老样子,先来看一段代码:

d3afa83d47c048f782d320cb3328cbf4.png

        我们先由我们自己的常规思路分析一下代码:子线程中,一直循环,直到ready被改为true,才能退出循环,然后打印number变量的值,我们在主线程中将ready修改为了true,那么子线程就可以打印number值了,但是结果与预期不同,主线程都结束了,子线程都还在循环中出不来,我们不是改了ready的值吗?这就说明子线程感应不到ready的变化,那怎么样才能保证让子线程能感应到ready的值被修改了呢?——使用volatile。

一、volatile

        volatile关键字保证了不同线程对某个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其它线程来说是立即可见的。


二、如何使用?

        在变量前添加volatile关键字就ok了!

438b3e6bf2d143a5bbf1adfa5198c2c0.png


三、volatile关键字能代替synchronized关键字吗?

        用代码来说话,使用我们之前用的代码——计数:

f643b1a67d814749a19cace3cde20e9f.png

        可以看到,结果是不对的,说明volatile关键字不能保证线程安全。所以volatile关键字不能代替synchronized关键字。


四、总结:

  • volatile关键字只保证了线程的可见性
  • volatile关键字不能代替synchronized关键字  
  • volatile关键字不能保证线程安全
  • volatile关键字适用于一个线程写,多个线程读的场景。

  

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

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

相关文章

小技巧:如何在已知PDF密码情况下去掉PDF的密码保护

第一步,用Edge打开你的pdf,输入密码进去 第二步,点击打印 第三步,选择导出PDF,选择彩印 第四步,选择导出位置,导出成功后打开发现没有密码限制了!

物联网mqtt网关搭建背后的技术原理

前言 物联网是现在比较热门的软件领域,众多物联网厂商都有自己的物联网平台,而物联网平台其中一个核心的模块就是Mqtt网关。这篇文章的目的是手把手教大家写书写一个mqtt网关,后端存储支持Kafka/Pulsar,支持mqtt 连接、断链、发送…

DevExpress中文教程 - 如何在.NET MAUI应用中实现Material Design 3?

DevExpress .NET MAUI多平台应用UI组件库提供了用于Android和iOS移动开发的高性能UI组件,该组件库包括数据网格、图表、调度程序、数据编辑器、CollectionView和选项卡组件等。 获取DevExpress v24.1正式版下载 Material Design是一个由Google开发的跨平台指南系统…

计算机毕业设计hadoop+spark+hive物流大数据分析平台 仓储数据分析 物流预测系统 物流信息爬虫 物流大数据 机器学习 深度学习 知识图谱 大数据

Hadoop物流可视化系统的开题报告 一、课题名称 Hadoop物流可视化系统设计与实现 二、研究背景与意义 随着信息技术的飞速发展,物流行业产生了海量的数据,这些数据包含了订单信息、运输路线、仓储状态等丰富的信息和价值。然而,传统的数据…

谷粒商城实战笔记-44-前端基础-Vue-整合ElementUI快速开发/设置模板代码

文章目录 一,安装导入ElementUI1,安装 element-ui2,导入 element-ui 二,ElementUI 实战1,将 App.vue 改为 element-ui 中的后台布局2,开发导航栏2.1 开发MyTable组件2.2 注册路由2.3 改造App.vue2.4 新增左…

AV1技术学习:Coding Structure

一、SuperBlock SuperBlock 是AV1编解码器可以处理的最大编码块。SuperBlock 大小可以是128 128 或64 64,由 sequence header 控制。SuperBlock 可以进一步划分为更小的编码块,每个编码块都有自己的预测和变换模式。SuperBlock 编码只依赖于它的上侧和…

【jmeter边界值提取器】

【目的】 从响应头中取token的内容 【方案】 使用后置处理器-边界值提取器 【组件路径】HTTP请求->右键添加->后置处理器->边界提取器 用途:边界提取器(Boundary Extractor)是放在Sample请求之后执行的,用于获取左右边界中间的所有字符&#xf…

Anaconda下安装配置Jupyter

Anaconda下安装配置Jupyter 1、安装 conda activate my_env #激活虚拟环境 pip install jupyter #安装 jupyter notebook --generate-config #生成配置文件提示配置文件的位置: Writing default config to: /root/.jupyter/jupyter_notebook_config.py检查版本&am…

指针!!C语言(第二篇)

目录 一. 数组名的理解 二. 一维数组传参的本质 三. 冒泡排序法 四. 二级指针与指针数组 五. 字符指针变量与数组指针 一. 数组名的理解 在我们对指针有了初步的理解之外,今天我们来掌握一些新的知识就是数组与指针,第一个对数组名的了解&#xff…

基于R语言复杂数据回归与混合效应模型【多水平/分层/嵌套】技术与代码

回归分析是科学研究特别是生态学领域科学研究和数据分析十分重要的统计工具,可以回答众多科学问题,如环境因素对物种、种群、群落及生态系统或气候变化的影响;物种属性和系统发育对物种分布(多度)的影响等。纵观涉及数…

excel批量新建多个同类型的表格

背景引入 比如,一个企业有多个部门,现在需要按照某一个excel表模板收集各个部门的信息,需要创建数十个同类型表格,且标题要包含部门名称。 1.修改模板表格标题 在一个文件夹下面放入需要发放给各个部门的表格,将标题…

初识godot游戏引擎并安装

简介 Godot是一款自由开源、由社区驱动的2D和3D游戏引擎。游戏开发虽复杂,却蕴含一定的通用规律,正是为了简化这些通用化的工作,游戏引擎应运而生。Godot引擎作为一款功能丰富的跨平台游戏引擎,通过统一的界面支持创建2D和3D游戏。…

Dav_笔记10:Using SQL Plan Management之1

SQL计划基准概述 SQL计划管理是一种预防机制,可以记录和评估SQL语句的执行计划。此机制可以构建SQL计划基准,这是一组SQL语句的已接受计划。已接受的计划已被证明表现良好。 SQL计划基准的目的 SQL计划基准的目标是保持相应SQL语句的性能,…

函数的参数

函数的参数 函数的参数可以增加函数的通用性 # 没有函数参数的函数 def num_add():a 1b 2return a bs1 num_add() print(s1) # 局限性:只可以计算两个数字的和,无法实现具有较高的通用性# 没有函数参数的函数 def num_add(a, b):return a bs num…

idea如何让包结构分层

文章目录 前言1.选中前项目包结构2.取消后项目包结构3.情况二 前言 在大型项目中,代码的分层管理至关重要。IDEA编辑器提供了强大的package分层结构功能,帮助开发者更好地组织和管理代码。通过合理配置,我们可以清晰地看到各个package之间的…

浏览器打开抽奖系统html

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>在线抽奖 随机选取 自动挑选</title> <script src"https://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <style> body {…

CrowdStrike更新致850万Windows设备宕机,微软紧急救火!

7月18日&#xff0c;网络安全公司CrowdStrike发布了一次软件更新&#xff0c;导致全球大范围Windows系统宕机。 预估CrowdStrike的更新影响了将近850万台Windows设备&#xff0c;多行业服务因此停滞&#xff0c;全球打工人原地放假&#xff0c;坐等吃瓜&#xff0c;网络上爆梗…

GPT盘新增容量后如何扩容?

场景&#xff1a;一块5T的GPT盘&#xff0c;现有需求再加10T&#xff0c; 在虚拟化平台加10T盘后&#xff0c;机器不重启&#xff0c;执行命令 echo 1 > /sys/block/sdb/device/rescan刷新磁盘容量&#xff0c;可看到容量已刷出。 但执行fdisk /dev/sdb时&#xff0c;发现创…

【Django5】模板引擎

系列文章目录 第一章 Django使用的基础知识 第二章 setting.py文件的配置 第三章 路由的定义与使用 第四章 视图的定义与使用 第五章 二进制文件下载响应 第六章 Http请求&HttpRequest请求类 第七章 会话管理&#xff08;Cookies&Session&#xff09; 第八章 文件上传…

鸿蒙 动态共享包HSP的创建和引用

1.什么是动态共享包HSP HSP&#xff08;Harmony Shared Package&#xff09;是动态共享包&#xff0c;可以包含代码、C库、资源和配置文件&#xff0c;通过HSP可以实现代码和资源的共享。HSP不支持独立发布&#xff0c;而是跟随其宿主应用的APP包一起发布&#xff0c;与宿主应…