java多线程基础之volatile

本文探讨了Java中的volatile关键字,解释了它如何确保多线程环境中的变量可见性和有序性。通过内存屏障的概念,展示了volatile如何防止指令重排序并保证数据同步。文章还介绍了几种基本的内存屏障指令,以及volatile写和读操作中内存屏障的插入位置。
摘要由CSDN通过智能技术生成

接下来几天,我会写写关于多线程方面的博客,今天的主题是volatile关键字。

  • 首先,先写一下Java内存模型的相关知识。

    • JMM一般都是围绕原子、可见、有序性三点讨论,在此仅是简单介绍。

    • 工作内存与主存定义:JVM定义了规定了所有变量都是存在主存里,每个线程都有自己的工作内存,线程对变量的所有操作都必须在其工作内存上进行,而不是直接对主存进行操作,而且每个线程都不能访问其它线程的工作内存。

    • 从图中,可知道高并发环境下,线程并不是直接去修改内存中的值,而是先去修改本身持有的副本。

      在这里插入图片描述

  • 浅谈,volatile是什么?

    • 为什么要用volatile?原因是在JMM中为了在适当的场合,确保线程间的有序性和可见性,java使用了一些特殊操作或者关键字来申明告诉虚拟机这个地方需要特别注意,不能随便变动优化目标指令。关键字volatile便是其中之一。
    • 当使用voaltile去修改一个变量的时候,就等于告诉虚拟机,这个变量是不稳定的,极有可能被某段程序或其他线程修改,为了确保这个变量在被修改后,让该应用程序中的所有线程能及时"看见",那么虚拟机就需要采取一些特殊手段保证该变量的可见性。
    • 保证可见性的简略过程,类似MESI协议:
      1. 预设两个线程,名称分别为A和B。使用volatile关键字修饰的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值