栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

volatile关键字的作用(volatile organic compounds发音)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

volatile关键字的作用(volatile organic compounds发音)

volatile是一个特征修饰符(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。

volatile是用来解决可见性的,Java在处理多线程任务时,每个线程都会有一个栈空间储存本线程的变量,若存在一个共享变量在共享内存,线程A改变了该变量的值,但是共享内存(主内存)没有及时更新,线程B在使用时就会继续使用旧值。

因此在变量前使用volatile修饰,就可以保证共享内存会及时更新变量值,这就是可见性。

可见性的特性可以总结为以下两点:

对变量的写操作会立即更新到共享内存

对变量的读操作会读共享内存中的已经更新的值

注意:

volatile没有锁的特性,不能实现同步。

volatile的写操作有原子性,线程A写完(所有步骤都已经完成之后),才可以被线程B读取到。

写操作也有先后顺序,线程A写完线程B才可以写,说明并发写操作时没有问题的。

i++这种自增操作不是原子性的!可能存在不同线程同时读到同一个值,然后加1,就不会得到预期的结果。

体现:

多线程并发的时候,如果初始化一个对象,分配内存之后,初始化对象和将对象指向分配的内存这两个过程的顺序可能会出现交换,如果将对象指向分配的内存的过程完成但是没有来得及初始化对象的时候,内存刷新,线程将会得到一个未初始化的对象,此时可以使用volatile来修饰就可以避免此类现象的发生,所有步骤都会按顺序进行。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/773199.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号