关于volatile的疑惑

zzywjing 2018-07-02 03:29:20
看资料说:
使用volatile必须具备以下2个条件:

1)对变量的写操作不依赖于当前值

2)该变量没有包含在具有其他变量的不变式中

谁能用白话解释下这两句话是什么意思呢,有点看不明白
...全文
186 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
月凉西厢 2018-07-03
  • 打赏
  • 举报
回复
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。

2)禁止进行指令重排序。
oyljerry 2018-07-02
  • 打赏
  • 举报
回复
因为volatile不能保证原子性,所以变量的要求就是不会有非原子操作
verejava 2018-07-02
  • 打赏
  • 举报
回复
1)对变量的写操作不依赖于当前值

2)该变量没有包含在具有其他变量的不变式中

只能直接赋值
比如 i=2 可以
a=2 ;i=a 不行
maradona1984 2018-07-02
  • 打赏
  • 举报
回复
https://www.aliyun.com/jiaocheng/286456.html
希望对你有用

我只把 "对变量的写操作不依赖于当前值" 丢到百度的搜索框里,貌似有一大把解释,但我觉得你应该结合上下文再理解这两句话
独立理解起来会有歧义

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧