文档章节

Java并发-volidate关键字

萧默
 萧默
发布于 2019/12/14 16:15
字数 540
阅读 7
收藏 0

使用volidate关键字修饰的成员变量,保证可见性,也就是当一个线程修改这样的成员变量后,其他的线程能够立即看到这次的修改。有两个方面的原因:

1.编译器不优化对这样的关键字修饰变量的一些访问操作

2.对读,写这个关键字修饰的变量前后,会追加内存屏障指令,使其当读之前,会主动从主存中读,当写之后,会使其他的缓存内的这个变量值失效,迫使使用那个缓存的线程再次读取这个变量时主动从主存中读取。

为何volidate关键字不保证原子性?

针对这样的变量的get,set能够保证原子性,但是针对某些操作无法保证原子性,比如++,--这样的操作。

使用的方式一般是一个线程修改变量,其余的线程读取变量。用作线程间通知的作用。

当初电话面试阿里巴巴的一个开发岗位,对方问了一下多线程的简单概念,问volatile关键字是否能保证线程安全,我说不能,他说为什么不能,我答不上来。

现在再次深入学习java并发编程,终于理解为什么volatile不能保证线程安全了。

保证线程安全可以有两种方式

1.原子操作,基本上只能是cas操作才能保证原子操作。

2.线程互斥执行,可以使用锁来保证线程互斥执行,也就是线程串行执行。

3.变量只被一个线程所读写。

知识需要理解,技能需要练习,体系需要建立。

© 著作权归作者所有

萧默
粉丝 0
博文 43
码字总数 19380
作品 0
杭州
程序员
私信 提问
求你了,再问你Java内存模型的时候别再给我讲堆栈方法区了…

GitHub 4.1k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 4.1k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 4.1k Star 的Java工程师成神之路 ,真的确定不来了解一下吗...

Hollis
2019/07/02
0
0
再有人问你Java内存模型是什么,就把这篇文章发给他!

前几天,发了一篇文章,介绍了一下JVM内存结构、Java内存模型以及Java对象模型之间的区别。有很多小伙伴反馈希望可以深入的讲解下每个知识点。Java内存模型,是这三个知识点当中最晦涩难懂的...

技术小能手
2018/09/30
0
0
「原创」Java并发编程系列01 开篇获奖感言

  全网都是复制粘贴的文章,师长这里一直坚持输出原创   点击上方“java进阶架构师”,选择右上角“置顶公众号   不要错过每一天的原创!      为什么要学并发编程   我曾听一个...

java进阶架构师
2019/09/28
0
0
来,了解一下Java内存模型(JMM)

网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。但是,很多人读完之后还是搞不清楚,甚至有的人说自己更懵了。本文...

android 开发
2018/08/21
0
0
再有人问你Java内存模型是什么,就把这篇文章发给他。

前几天,发了一篇文章,介绍了一下JVM内存结构、Java内存模型以及Java对象模型之间的区别。有很多小伙伴反馈希望可以深入的讲解下每个知识点。Java内存模型,是这三个知识点当中最晦涩难懂的...

Java架构
2018/07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kettle自定义jar包供javascript使用

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。 本篇文章有参考自:https://www...

CREATE_17
昨天
102
0
处理CSV文件中的逗号

我正在寻找有关如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且该值可能带有逗号(例如公司名称)。 我们正在研究的一些想法是:带引号的标识符(值“,”值“,”等)或使用|...

javail
昨天
79
0
如何克隆一个Date对象?

将Date变量分配给另一个变量会将引用复制到同一实例。 这意味着更改一个将更改另一个。 如何实际克隆或复制Date实例? #1楼 简化版: Date.prototype.clone = function () { return new ...

技术盛宴
昨天
73
0
计算一个数的数位之和

计算一个数的数位之和 例如:128 :1+2+8 = 11 public int numSum(int num) { int sum = 0; do { sum += num % 10; } while ((num = num / 10) > 0); return sum;......

SongAlone
昨天
124
0
为什么图片反复压缩后普遍会变绿,而不是其他颜色?

作者:Lion Yang 链接:https://www.zhihu.com/question/29355920/answer/119088684 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 业余版概要:安卓的...

shzwork
昨天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部