当前位置:首页 > 科技  > 软件

Java中的Volatile到底是什么?

来源: 责编: 时间:2023-10-13 14:37:48 383观看
导读图片volatile是什么?"volatile"是一个关键字,用于修饰变量。它的作用是告诉编译器该变量可能会在意料之外的时候被修改,因此编译器在对该变量进行优化时需要特别小心。具体来说,当一个变量被声明为"volatile"时,编译器会禁

图片图片CV028资讯网——每日最新资讯28at.com

volatile是什么?

"volatile"是一个关键字,用于修饰变量。它的作用是告诉编译器该变量可能会在意料之外的时候被修改,因此编译器在对该变量进行优化时需要特别小心。CV028资讯网——每日最新资讯28at.com

具体来说,当一个变量被声明为"volatile"时,编译器会禁止对该变量进行某些优化,以确保每次访问该变量时都会从内存中读取最新的值,而不是使用之前缓存的值。这对于多线程编程或者与硬件交互的程序非常重要,因为在这些情况下,变量的值可能会被其他线程或者硬件设备修改。CV028资讯网——每日最新资讯28at.com

需要注意的是,"volatile"关键字只能保证变量的可见性,不能保证原子性。如果需要保证原子性,还需要使用其他的同步机制,比如互斥锁或原子操作。CV028资讯网——每日最新资讯28at.com

总结起来,"volatile"关键字用于修饰变量,告诉编译器该变量可能会在意料之外的时候被修改,从而禁止对该变量进行某些优化,确保每次访问变量时都会从内存中读取最新的值。CV028资讯网——每日最新资讯28at.com

在Java中,关键字volatile用于修饰变量,用来确保多个线程之间对该变量的可见性和顺序性。CV028资讯网——每日最新资讯28at.com

当一个变量被声明为volatile时,它的值将会被存储在主内存中,而不是线程的本地内存中。这样,当一个线程修改了该变量的值时,其他线程可以立即看到最新的值,而不是使用本地缓存中的旧值。CV028资讯网——每日最新资讯28at.com

此外,volatile关键字还可以防止指令重排序,即保证了对该变量的操作按照代码的顺序执行,不会发生乱序执行的情况。CV028资讯网——每日最新资讯28at.com

需要注意的是,volatile关键字只能保证可见性和顺序性,并不能保证原子性。如果需要保证原子性,可以考虑使用synchronized关键字或java.util.concurrent.atomic包中的原子类。CV028资讯网——每日最新资讯28at.com

volatile作用

在Java中,volatile的作用是确保多个线程之间对该变量的可见性和有序性。具体来说,volatile的作用有以下几点:CV028资讯网——每日最新资讯28at.com

  1. 可见性:当一个线程修改了volatile修饰的变量的值时,其他线程能够立即看到最新的值。这是因为volatile修饰的变量会被存储在主内存中,而不是线程的本地缓存中,从而保证了可见性。
  2. 有序性:volatile修饰的变量的读写操作具有顺序性。也就是说,当一个线程对volatile变量进行写操作后,其他线程在读取该变量时,会按照写操作的顺序来读取,不会出现乱序的情况。

volatile关键字在多线程编程中起到了重要的作用,可以用来确保变量的可见性和有序性,从而避免了由于线程间的竞争而引发的一些问题。CV028资讯网——每日最新资讯28at.com

原子性

原子性是指一个操作要么完全执行,要么完全不执行,不会出现部分执行的情况。原子性是并发编程中的一个重要概念,用于确保多个线程或进程之间的操作不会相互干扰。CV028资讯网——每日最新资讯28at.com

在并发编程中,多个线程或进程可能同时访问共享资源,如果没有保证原子性,就可能导致数据不一致或竞态条件等问题。为了保证原子性,可以使用锁、互斥量、原子操作等机制来控制对共享资源的访问。CV028资讯网——每日最新资讯28at.com

在数据库中,原子性也是一个重要的概念。原子性要求数据库的操作要么全部执行成功,要么全部不执行,不会出现部分执行的情况。数据库中的事务就是为了保证原子性而设计的,事务可以将一组操作作为一个不可分割的单元进行执行,要么全部执行成功,要么全部回滚。CV028资讯网——每日最新资讯28at.com

可见性

在计算机科学中,可见性通常指的是在多线程或并发编程中,一个线程对于其他线程的操作是否可见。可见性问题是由于多线程的执行顺序不确定性而引起的,当一个线程对共享变量进行修改后,其他线程可能无法立即看到这个修改,导致数据不一致或错误的结果。CV028资讯网——每日最新资讯28at.com

有序性

为了提高程序的执行效率,编译器对编译后的指令进行重排序,即代码的编写顺序不一定就是代码的执行顺序。CV028资讯网——每日最新资讯28at.com

并发编程只有同时满足这三大特性,才能保证程序正确的执行,而volatile只保证了可见性和有序性,不保证原子性。CV028资讯网——每日最新资讯28at.com

volatile的作用只有两个

  • 保存内存的可见性
  • 禁止JVM内存重排序(保证有序性)

在并发多线程情况下,为什么会有可见性问题?如果不做控制,为什么一个线程修改了共享变量的值,其他线程不能立即看到。这里就需要了解JMM(JAVA内存模型,JAVA memory model)CV028资讯网——每日最新资讯28at.com

由于JAVA共享变量是存储在主内存中,而JAVA线程是无法直接访问主内存数据,只能把主内存的数据拷贝一份副本,修改完本地内存的数据,再写回主内存,而此时另一个线程也把主内存的数据拷贝到自己私有的本地内存中,虽然线程1已经修改了主内存数据,但线程2却无法感知到,所以就出现了内存可见性问题。CV028资讯网——每日最新资讯28at.com

可见性实现原理

当一个共享变量声明为volatile后,会有以下效果:CV028资讯网——每日最新资讯28at.com

  • 当写一个volatile变量时,JMM会把该线程对应的本地内存中的变量强制刷新到主内存中去。
  • 这个写回操作会导致其他线程的缓存无效。

(volatile主要通过汇编lock前缀指令,它会锁定当前内存区域的缓存行,并且立即将当前缓存行数据写入到主内存中耗时非常短),回写主内存的时候会通过MESI协议使其他线程缓存了该变量的地址失效,从而导致其他线程需要去主内存中重新读取数据到工作线程中。)CV028资讯网——每日最新资讯28at.com

有序性保证的原理:它是通过插入内存屏障,在内存屏障前后禁止重排序优化,以此实现有序性。CV028资讯网——每日最新资讯28at.com

volatile应用场景

它可以保证可见性和有序性,但无法保证原子性,所以它的应用场景不如synchronized广泛,主要有两个场景:一个是做状态变量,二是做需要重新赋值的共享对象。CV028资讯网——每日最新资讯28at.com

vloatile与synchronized的区别

volatile只能修饰变量,而后者可以修饰方法,语句块。volatile不能保证原子性,而后者是可以保证原子性的。都可以保证可见性,但原理不同,volatile是对变量加了Lock,而后者使用monitorEnter和monitorExit。volatile不会引起阻塞,而后者会。在一些场景下使用volatile性能是要更好地。CV028资讯网——每日最新资讯28at.com

volatile使用条件

对变量的写操作不依赖当前值:比如i++操作,变量的写操作依赖安全值,所以不能保证线程安全。该变量没有包含在具有其他变量的不变式中。比如i<value,即使i变量声明为volatile,也不能保证线程安全,因为value可能在运行时候的判断发生变化。CV028资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-13351-0.htmlJava中的Volatile到底是什么?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 深入探索Elasticsearch:高级查询技巧与性能优化策略

下一篇: 面试中如何答好:ReentrantLock

标签:
  • 热门焦点
  • Java NIO内存映射文件:提高文件读写效率的优秀实践!

    Java的NIO库提供了内存映射文件的支持,它可以将文件映射到内存中,从而可以更快地读取和写入文件数据。本文将对Java内存映射文件进行详细的介绍和演示。内存映射文件概述内存
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都有新的进展,其中荣耀、三星都已陆续发布了最新的折叠屏旗舰,尤其号荣耀Magi
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
Top