首页 > 编程语言 >java并发之volatile

java并发之volatile

时间:2022-10-13 17:55:06浏览次数:36  
标签:缓存 java 并发 volatile 内存 线程 cpu

java并发围绕原子性、可见性和有序性展开。volatile可以保证可见性。

在说volatile前,需要了解几个概念。

1、JMM(java memory model)

JMM是个抽象的概念,他是java对底层操作系统的一种抽象。在多处理器框架下,cpu需要先把数据从内存拷贝到cpu缓存(如L1、L2和L3),在从缓存中取数据进行运算。JMM是对于这种框架的一个抽象,不同线程操作需要先将数据从共享内存拷贝到工作内存。

    

 

 

2、总线嗅探

cpu和内存以及其他的计算机部件都是通过总线去通信。cpu不仅要处理计算,还会去嗅探总线上的一些其他消息。

4、缓存一致性协议(如mesi)

多个线程操作同一个变量,但在自己的工作内存中的值却不一样,这就出现了一致性问题。当数据需要同步给主存时,又以哪一个值作为标准呢?所以提出了缓存一致性协议,mesi是一种比较通用的协议实现。

mesi中,m表示modified,e表示exclusive,s表示shared,i表示invalid。这四种状态表示缓存行的一个状态。

例子:比如线程a需要操作变量x,会先将x从主存加载到线程a的工作内存,并且把x设置为exclusive,表示自己独占x。如果线程b也需要加载变量x,这时a和b中的变量x的状态就会设置为shared。当a修改变量x后,会通过总线告知其他cpu,同时将x设置为modified,其他cpu将缓存中的x设置为invalid。被设置为invalid后的值表示无效,需要从主存中重新加载。b再次加载x的动作,会被延迟到a将x写回主存之后。

这也是volatile可以保证可见性的原理。

5、volatile

volatile保证可见性是通过缓存一致性协议。但是volatile还可以禁止指令重排序。

volatile通过在volatile读写的前后增加内存屏障,来禁止指令重排序。通过该方法,实现了部分的有序性。但是volatile不能保证原子性。

标签:缓存,java,并发,volatile,内存,线程,cpu
From: https://www.cnblogs.com/wzllzw/p/16789114.html

相关文章

  • 《大话设计模式 Java溢彩加强版》相关主题
    《大话设计模式Java溢彩加强版》读者须知     《大话设计模式Java溢彩加强版》在2022年10月在各大网上书店中有售!源代码与课件下载 《大话设计模式Java溢彩......
  • Java并发(线程状态、线程调度、线程同步)
    Java并发(线程状态、线程调度、线程同步)线程状态​ 线程共有5种状态,在特定情况下,线程可以在不同的状态之间切换。5种具体状态创建状态:实例化一个新的线程对象,还未启......
  • Java并发(进程、线程、多线程,使用)
    Java并发(进程、线程、多线程,使用)进程和线程定义进程:进程是计算机正在运行的一个独立的应用程序。线程:线程是组成进程的基本单位,可以完成特定的功能,一个进程是由一个......
  • ajax+javascript+tp搜索页面跳转
      搜索页面代码:<formclass="a"action="/news/search.html"method="get"role="form"id="searchform"><divclass="form-group"><inputtype="tex......
  • 【JS】167-JavaScript设计模式——装饰者模式
    四、装饰者模式(DecoratorPattern)1.概念介绍装饰者模式(DecoratorPattern):在不改变原类和继承情况下,动态添加功能到对象中,通过包装一个对象实现一个新的具有原对象相同接口......
  • 【JS】169-JavaScript设计模式——外观模式
    六、外观模式(FacadePattern)1.概念介绍外观模式(FacadePattern) 是一种简单又常见的模式,它为一些复杂的子系统接口提供一个更高级的统一接口,方便对这些子系统的接口访问......
  • 【JS】168-JavaScript设计模式——策略模式
    五、策略模式(StrategyPattern)1.概念介绍策略模式(StrategyPattern):封装一系列算法,支持我们在运行时,使用相同接口,选择不同算法。它的目的是为了将算法的使用与算法的实现......
  • 【JS】166-JavaScript设计模式——迭代器模式
    三、迭代器模式(IteratorPattern)1.概念介绍迭代器模式(IteratorPattern) 是提供一种方法,顺序访问一个聚合对象中每个元素,并且不暴露该对象内部。这种模式属于行为型模式......
  • 【JS】172-JavaScript设计模式——观察者模式
    九、观察者模式(ObserverPatterns)1.概念介绍观察者模式(ObserverPatterns) 也称订阅/发布(subscriber/publisher)模式,这种模式下,一个对象订阅定一个对象的特定活动,并在状......
  • 【JS】170-JavaScript设计模式——代理模式
    七、代理模式(ProxyPattern)1.概念介绍代理模式(ProxyPattern) 为其他对象提供一种代理,来控制这个对象的访问,代理是在客户端和真实对象之间的介质。简单的理解:如我们需要......