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.mzph.cn/bicheng/49207.shtml

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

相关文章

NoSQL之Redis非关系型数据库

目录 一、数据库类型 1)关系型数据库 2)非关系型数据库 二、Redis远程字典服务器 1)redis介绍 2)redis的优点 3)Redis 为什么那么快? 4)Redis使用场景 三、Redis安装部署 1&#xff0…

kail-linux如何使用NAT连接修改静态IP

1、Contos修改静态IP vi /etc/sysconfig/network-scripts/ifcfg-ens33, 标记红色处可能序号会变动 参考linux配置网络不通解决方案_kylinv10sp2 网关不通-CSDN博客https://tanrt06.blog.csdn.net/article/details/132430485?spm1001.2014.3001.5502 Kail时候NAT连…

从 NextJS SSRF 漏洞看 Host 头滥用所带来的危害

前言 本篇博文主要内容是通过代码审计以及场景复现一个 NextJS 的安全漏洞(CVE-2024-34351)来讲述滥用 Host 头的危害。 严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能…

NCRE2-3 网络服务器选型

记忆的部分比较多,会有错误 网络服务器的分类 了解 应用领域不同 Internet通用服务器数据库服务器文件服务器应用服务器 按网络应用规模 基础级服务器工作组级服务器部门级服务器企业级服务器 按网络服务器主机的硬件体系结构 基于CISC处理器的Inter机构(IA)的…

浅谈断言之XML Schema断言

浅谈断言之XML Schema断言 “XML Schema断言”是一种专门用于验证基于XML的响应是否遵循特定XML Schema定义的标准和结构的断言类型。下面我们将详细探讨XML Schema断言的各个方面。 XML Schema断言简介 XML Schema断言(XML Schema Assertion)允许用户…

fastJSON 解决kafka消息斜杠转义问题

Bug: kafka发送消息时的JSON转义异常 问题描述: 问题描述:kafka消息发送出去但是消费者执行相关逻辑的时候报错. 场景:当时实习的时候需要模拟数据做一个实时经纬度传输的接口,使用kafka实时发送消息将数据同步到数据库中 问题分析: fastjson使用不当可能导致转义异常**,kafka…

Android 15 之如何快速适配 16K Page Size

在此之前,我们通过 《Android 15 上 16K Page Size 为什么是最坑》 介绍了: 什么是16K Page Size为什么它对于 Android 很坑如何测试 如果你还没了解,建议先去了解下前文,然后本篇主要是提供适配的思路,因为这类适配…

计算机视觉9 全卷积网络

全卷积网络(Fully Convolutional Network,简称 FCN)在计算机视觉领域具有重要地位。 传统的卷积神经网络(CNN)在最后的输出层通常使用全连接层来进行分类任务。然而,全连接层会丢失空间信息,使得…

Facebook Dating:社交平台的约会新体验

随着社交媒体的普及和技术的发展,传统的社交方式正在经历革新,尤其是在约会这个领域。Facebook作为全球领先的社交平台,推出了Facebook Dating,旨在为用户提供一个全新的约会体验。本文将探讨Facebook Dating如何重新定义社交平台…

OpenCV 安装与基础使用教程(Python)

文章目录 一、硬件要求二、安装三、功能介绍总结 一、硬件要求 OpenCV 是一个跨平台的计算机视觉库,对硬件的要求并不严格,但为了更好的性能和体验,建议满足以下配置: 操作系统:Windows 10 或更高版本,Ub…

mysql 根据一个表的id,查询另一个表,看看数据是否存在

如果你想要检查一个表中的id是否在另一个表中作为外键存在,你可以使用SQL的EXISTS子句来完成这个任务。以下是一个例子: 假设我们有两个表,orders和customers。orders表有一个customer_id字段,我们想要检查customers表中的每个id是…

43 华三AC登录Web页面

一 无线上WEB页面 1 创建vlan 56 [AC-KongZhi]vlan 56 2 退出 [AC-KongZhi-vlan56]quit 3 进入vlan三层口 配置IP地址 [AC-KongZhi]interface Vlan-interface 56 [AC-KongZhi-Vlan-interface56]ip address 192.168.56.55 24 4 在AC控制器与Host主机的接口上能通关vlan 5…

高等数学重难点突破:高阶导数的计算

写在最前 文章目录 写在最前方法一:找规律方法二:牛顿莱布尼茨公式方法三:泰勒公式方法四: 数学归纳法 本文重点讨论总结面对高阶导数,我们可以使用哪些方法(工具)来解决计算高阶导数问题 方法概述&#xf…

【入门教程一】基于DE2-115的My First FPGA 工程

1.1. 概述 这是一个简单的练习, 可以帮助初学者开始了解如何使用Intel Quartus 软件进行 FPGA 开发。 在本章节中,您将学习如何编译 Verilog 代码,进行引脚分配,创建时序约束,然后对 FPGA 进行编程,驱动开…

React 学习指南:从入门到精通

在前端开发的世界里,React 无疑是一颗璀璨的明星。如果你渴望掌握这一强大的前端框架,那么这篇学习指南将为你指明道路。 一、React 简介 React 是一个用于构建用户界面的 JavaScript 库,由 Facebook 开发和维护。它以其高效的虚拟 DOM 机制、…

【Redis】主从复制分析-基础

1 主从节点运行数据的存储 在主从复制中, 对于主节点, 从节点就是自身的一个客户端, 所以和普通的客户端一样, 会被组织为一个 client 的结构体。 typedef struct client {// 省略 } client;同时无论是从节点, 还是主节点, 在运行中的数据都存放在一个 redisServer 的结构体中…

python批量图片重命名

为了使用Python将文件夹内的PNG图片重命名为递增数字加上13位时间戳的格式,你需要先确定几个关键点: 递增数字:你需要一个计数器来跟踪已经重命名的图片数量。时间戳:由于你需要的是13位的时间戳(这通常是毫秒级的时间…

求职学习day8

7/21回顾: 用面试鸭的意义可能就在于将知识点用问答的形式具象化在脑海,不然可能只停留在听说过的感觉 7.21 玩了一天。一个很不好的信号。今天下午要试试把 mall 项目的代码运行过一遍。 项目运行问题: 问题 1 :两个门服务器…

搜维尔科技:人机交互学术应用概览

人机交互学术应用概览 搜维尔科技:人机交互学术应用概览

Numpy常见操作总结

NumPy 提供高效的多维数组对象 (ndarray) 用于大规模数据处理。它包含丰富的数学函数库,支持线性代数、傅里叶变换和随机数生成等操作。 以下代码内容包括对于数组对象的查看、数据处理等操作 import numpy as np# 创建一个二维和三维数组 array_e1 np.array([[1,…