voliate的理解

作者: imbird | 来源:发表于2017-04-08 15:37 被阅读0次

先MARK一个网址
http://www.cnblogs.com/zemliu/p/3298685.html

Voliate

java并发编程实战中对同步的理解,强调了同步不只是synchronized还有 voliate.后者一般是修复属性使用。violate也是同步的一种方式

网上基本上对violate的解释都是内存可见性,因为每个Thread都有属于它们自己的内存空间,这个线程做了对某些属性的更新操作,另一个线程不一定是看得到的。这个时候就是violate这个的作用了。

我个人的理解 violate是一个弱同步的一个关键字

  • 每次修改volatile变量都会同步到主存中
  • 每次读取volatile变量的值都强制从主存读取最新的值(强制JVM不可优化volatile变量,如JVM优化后变量读取会使用cpu缓存而不从主存中读取)
  • 线程 A 中写入 volatile 变量之前可见的变量, 在线程 B 中读取该 volatile 变量以后, 线程 B 对其他在 A 中的可见变量也可见. 换句话说, 写 volatile 类似于退出同步块, 而读取 volatile 类似于进入同步块

(补充第三点:

public Class ViolateTest{
private String A;
private String B;
private violate String C;
}

当这个时候有两个线程先设置A 再设置 B 再设置 C
假如ABC 都不是violate的,拿另一个线程可能读到ABC都不是正确的值。当C用了violate以后
前面A B 的值也会一起设置到主内存中去。所以这个时候violate有了同步块的效果

为什么说它是弱同步关键字,因为它不能对I++ ++i这些CAS多步操作同步,要使这种复合操作同步的话,需要借用synchronized 和 atomicXX类的实现。

相关文章

  • voliate的理解

    先MARK一个网址http://www.cnblogs.com/zemliu/p/3298685.html Vol...

  • Java 并发包

    主要包含: 原子类 AutomaticLongLock Synchroize voliate线程集合 concur...

  • 杂谈

    锁 voliate,JVM主内存,JVM工作内存 线程 OS主内存 cpu cache(高速缓存) 处理...

  • JVM

    【java内存模型 https://www.jianshu.com/p/d3fda02d4cae】voliate是...

  • 不错的voliate 关键字解析

    https://mp.weixin.qq.com/s/NV1ajl4Q1WqtkV8Xot349A不错的volia...

  • voliate关键字及其示例

    voliate关键字 1 使变量在线程间可见 对于避免不可见性问题,Java还提供了一种弱形式的同步,即使用了vo...

  • 线程同步(锁)

    Java的线程安全性问题主要关注点有3个:可见性、有序性和原子性。 voliate 是由于本身语义禁止了指令重排语...

  • Java volatile如何防止指令重排序

    voliate关键字的两个作用 1、 保证变量的可见性:当一个被volatile关键字修饰的变量被一个线程修改的时...

  • 理解不曾理解的

    上学时从来没把容貌当成大事儿,只是希望脸上的痘痘能少点,至于什么皮肤白、毛孔粗大、黑眼圈、肤色暗淡、脸型、眉形、眼...

  • 难被理解的理解

    我们都渴望被看见,渴望被理解。这个人性既驱使着我们,也限制着我们。 这是一个强者生存或者说适者生存的社会。这个社会...

网友评论

    本文标题:voliate的理解

    本文链接:https://www.haomeiwen.com/subject/fkilattx.html