看了书上的这段话,有句话不理解,但我还是把三句话都打出来和大家分享加锁可以保证可见性于原子性;volatile变量只能保证可见性只有满足下面的标准后,你才能使用volatile变量:1.写入变量时并不依赖变量的当前值;或者能够确保只有单一的线程修改变量的值2.变量不需要与其他的状态变量共同参与不变约束。//这句不理解3.而且,访问变量时,没有其他的原因需要加锁。
我第二句不理解,首先,什么叫不变约束呢?
我第二句不理解,首先,什么叫不变约束呢?
解决方案 »
- 帮帮忙,看个小简单基础 java for 循环 变量名
- 复杂el表达式求助
- java中有没有检查日期格式的异常
- 如何通过java获取IE临时文件夹的路经
- 系统时间问题
- 请大家帮帮忙,我朋友不能上网,要我帮他问问题(我不动Java),谢谢各位指点(简单问题),解决一定多给分
- 大家帮我,我帮大家。高分求救——————
- 这是什么问题:java.lang.InstantiationException: `net.cnnic.registrar.RRPClientSession' has no public zero-arg constructor
- 关于PAT的题目问题,求大神帮忙找错
- 大佬求助 JAVA静态数组初始化 这个鬼样子我真受不了了……
- 大家帮帮忙啊·谢谢了
- IP输入框的问题——程序不能运行,谁帮我看看
楼主看看这个是否有用,楼主好运
int A;如果是volatile的,那么Thread-A和Thread-B每次去读A的值都必须去Main Memory里,所以会是一致的
但如果A的定义是A=1+X;那么Thread-A和Thread-B每次去读A的值虽然都是去Main Memory里,但不能保证X的值是一致而且最新的
如果把一个变量定义成volatile的,就等于告诉编译器对此变量不要做任何优化。
这里所说的优化就是指:可能会移除那些使字段与线程里的本地数据复本保持完全同步的读写操作。我根据以上的观点来分析LZ的第二句:
变量不用与本地数据复本保持同步。volatile关键字就是不让线程在本地栈保持这个变量的复本。
所以线程看到的就一定是我们定义的这个唯一的变量了。
该变量没有包含在具有其他变量的不变式中。 我看到了上面这句话,有一点搞不懂
为什么需要这个条件:“该变量没有包含在具有其他变量的不变式中”
能否给我举例说明一下呢?