java并发编程-volatile的作用

文章目录

  • volatile的作用
    • 1.改变线程间的变量可见性
    • 2.禁止指令重排序
  • 参考的学习视频

volatile的作用

1.改变线程间的变量可见性

每个线程都有一个专用的工作集内存,下图里面粉色的表示专用工作集内存,黄色的是共享内存工作区,如果加入了volatile,那么t1也会去查看黄色的共享内存工作区,以及时查看volatile变量的变化,这就是改变了“线程间的变量可见性”!
i修改之前:(不管有没有volatile的情况)
在这里插入图片描述
i没有volatile并且修改之后:
在这里插入图片描述
i有volatile并且修改之后:
在这里插入图片描述

在这里插入图片描述

import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;public class Main {
//    volatile int i = 1;int i = 1;void task1() {System.out.println("开始");while (i == 1){}System.out.println("结束");}public static void main(String[] args) {Main main = new Main();new Thread(main::task1).start();try {TimeUnit.SECONDS.sleep(2   );} catch (Exception e) {e.printStackTrace();}main.i = 2;}
}

如何针对“线程不可见性”进行解决问题?
加入volatile修饰即可!

import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;public class Main {volatile int i = 1;
// int i = 1;void task1() {System.out.println("开始");while (i == 1){}System.out.println("结束");}public static void main(String[] args) {Main main = new Main();new Thread(main::task1).start();try {TimeUnit.SECONDS.sleep(2   );} catch (Exception e) {e.printStackTrace();}main.i = 2;}
}

2.禁止指令重排序

这里不细说展开,直接给黑马学习视频链接,他讲解的十分清晰!!!看多几遍就好了!!!
【新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)】 https://www.bilibili.com/video/BV1yT411H7YK/?p=99&share_source=copy_web&vd_source=afbacdc02063c57e7a2ef256a4db9d2a
在这里插入图片描述

参考的学习视频

【【java并发】5分钟快速了解volatile关键字,上岸大厂有保证。】 https://www.bilibili.com/video/BV1WC4y1y7na/?share_source=copy_web&vd_source=afbacdc02063c57e7a2ef256a4db9d2a
2.
【新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)】 https://www.bilibili.com/video/BV1yT411H7YK/?p=99&share_source=copy_web&vd_source=afbacdc02063c57e7a2ef256a4db9d2a

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

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

相关文章

linux中级(防火墙firewalld)

一。firewalld与iptables区别1.firewalld可以动态修改单条规则,不需要像iptables那样,修改规则后必须全部刷新才可生效。firewalld默认动作是拒绝,则每个服务都需要去设置才能放行,而iptables里默认是每个服务是允许,需…

C#/.NET/.NET Core学习路线集合,学习不迷路!

前言 C#、.NET、.NET Core、WPF、WinForm、Unity等相关技术的学习、工作路线集合(持续更新)!!! 全面的C#/.NET/.NET Core学习、工作、面试指南:https://github.com/YSGStudyHards/DotNetGuide C#/.NET/.N…

Linux 实例:无法通过 SSH 方式登录

现象描述 使用 SSH 登录 Linux 实例 时,提示无法连接或者连接失败,导致无法正常登录 Linux 实例。 现象描述 处理措施 SSH 登录报错 User root not allowed because not listed in AllowUsers 排查 SSH 登录报错 User root not allowed because not …

后端Java学习:springboot之文件上传(阿里云OSS存储)

一、什么是阿里云存储? 阿里云对象存储OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。 二、阿里云…

当下的力量:拥抱自我与持续学习的旅程

许多人被无尽的选择与信息所淹没,常常感到迷茫与焦虑。然而,真正的力量来自于对当下的专注,以及对自我的深刻理解与不断提升。如何在喧嚣中找到内心的宁静?如何在复杂的世界中坚持学习与成长?这不仅是一个时代的问题&a…

【android12】【AHandler】【3.AHandler原理篇AHandler类方法全解】

AHandler系列 【android12】【AHandler】【1.AHandler异步无回复消息原理篇】-CSDN博客 【android12】【AHandler】【2.AHandler异步回复消息原理篇】-CSDN博客 其他系列 本人系列文章-CSDN博客 1.简介 前面两篇我们主要介绍了有回复和无回复的消息的使用方法和源码解析&a…

GPRS是什么?

‌GPRS(General Packet Radio Service)‌是一种基于GSM(Global System for Mobile Communications)系统的无线分组交换技术,提供端到端的广域无线IP连接。与传统的GSM系统不同,GPRS采用分组交换技术&#x…

flutter 专题二 Flutter状态管理之Riverpod 0.8.4

一 、flutter 有哪些状态管理方式 Flutter的状态管理方式有很多,Redux、 Bloc、 MobX、Provider等等。单单一个Provider,我也见到了各种组合,例如ChangeNotifier Provider / StateNotifier Provider( freezed)。各…

海风里的青春:海滨学院班级回忆录开发

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

ts:用加减乘除方法配合展示类的继承(extends)

ts:用加减乘除方法配合展示类的继承(extends) 1 主要内容说明2 例子2.1 基类的创建2.1.1 源码1 (基类的创建)2.1.2 源码1运行效果 2.2 继承基类的参数和方法2.2.1 源码2(继承基类的参数和方法)2…

Java中的容器及其区别

|Collection |  ├List |  │-├LinkedList |  │-├ArrayList |  │-└Vector |  │ └Stack |  ├Set |  │├HashSet |  │├TreeSet |  │└LinkedSet | |Map   ├Hashtable   ├HashMap   └WeakHashMap 1、Java中的容器 Java容器类…

论文阅读- --DeepI2P:通过深度分类进行图像到点云配准

目前存在的问题: 单模态配准具有局限性,多模态研究很少跨模态图像到点云配准问题是求解相机坐标系与点云之间的旋转矩阵R ∈ SO(3)和平移向量t ∈ R3。 这个问题很困难,因为由于缺乏点到像素的对应关系,无法使用 ICP、PnP 和捆绑调…

Air780E如何发送SMS?一文详解!

今天一起来学习使用合宙低功耗4G模组Air780E发送SMS短消息: 一、SMS简介 SMS(短消息服务,ShortMessageService)功能主要用于在蜂窝网络中传输短消息。 在4G网络中,短信可以在数据传输的同时进行,不会因数…

Centos 7系统一键安装宝塔教程

服务器推荐青鸟云服务器,2H2G低至16元/月 官网地址: 所有产品_香港轻量云 2核 2G-A型_青鸟云 推荐Finalshell软件连接至服务器,下载地址: https://dl.hostbuf.com/finalshell3/finalshell_windows_x64.exe 下载完成后连接服务…

知识吾爱纯净版小程序系统 leibiao SQL注入漏洞复现(XVE-2024-30663)

0x01 产品简介 知识吾爱纯净版小程序系统是一款基于微信小程序平台开发的知识付费应用,旨在帮助用户快速建立自己的知识付费平台,实现支付变现和流量主收益。它提供了简洁明了的用户界面和良好的用户体验,同时注重用户隐私保护,确保用户信息的安全存储和传输。 0x02 漏洞…

HTML前端页面设计静态网站

浅浅分享一下前端作业&#xff0c;大佬轻喷~ <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>一个网…

各大自媒体平台的感受 —— 小红书

如果你有些内容&#xff0c;想发布到自媒体平台上&#xff0c;目前有很多平台可用选择。 发布自媒体在获得关注的同时&#xff0c;同时也会期望有些收益。 我们的内容也发布了不少时间了&#xff0c;那就分别扒下各大自媒体平台的吃相&#xff0c;这篇文章说的是小红书。 收…

openEuler下配置openGauss环境图解

一、在openEuler中创建用户&#xff0c;并授予权限 # 创建用户 sudo adduser omm# 授予权限 chown omm /opt# 切换用户 su - omm 二、在openGauss官网找到openGauss极简版的软件包 openGauss软件 | openGauss下载 | openGauss软件包 | openGauss社区 右键立即下载&#xff0…

RabbitMQ 的集群

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ 的集群】面试题&#xff1f;希望对大家有帮助&#xff1b; RabbitMQ 的集群 RabbitMQ 是一种流行的开源消息代理&#xff0c;广泛用于构建分布式系统中的消息队列。随着应用程序规模的扩大&#xff0c;单一的 RabbitMQ 实…

[ 应急响应基础篇 ] Windows 写入任务计划程序详解--任务计划程序窗口写入 命令行写入

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…