打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
多线程编程中什么情况下需要加volatile呢?

先说一下在JDK1.2之前的,那个Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,那么现在在多线程环境下volatile关键字的使用也变得非常重要的的,所以经常使用。

欢迎加入我的技术交流群:587069240(只限于编程技术交流的人群加入!!!)

现在一般说来,多任务多线程的环境下的,各任务间共享的变量都应该加volatile修饰符的。

可见性的过程:

这个Volatile修饰的成员变量在每次被线程访问时的,都都强迫从共享内存中重读该成员变量的值。而且得,当成员变量发生变化时,强迫线程将变化值回写到共享内 存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值的的,就是保持可见性

可以禁止指令重排介绍:

这个指令重排序是JVM为了优化指令、提高程序运行效率,在不影响单线程程序执行结果的前提下,尽可能地提高并行度的。

指令重排序包括编译器重排序和运行时重排序。

在JDK1.5之后,可以使用volatile变量禁止指令重排序

那么针对volatile修饰的变量,在读写操作指令前后会插入内存屏障,指令重排序时不能把后面的指令重排序到内存屏障后面的。

这个JVM内存屏障插入的策略的:

这个每个volatile写操作的前面插入一个StoreStore屏障的;

可以在每个volatile写操作的后面插入一个StoreLoad屏障; 在每个volatile读操作的后面插入一个LoadLoad屏障; 在每个volatile读操作的后面插入一个LoadStore屏障的。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
快速掌握并发编程---深入了解volatile
我们所熟悉的java并发volatile!
volatile关键字的作用
Java 多线程程序设计要点(synchronized)
java线程安全总结
Java 多线程三大核心
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服