2 Star 0 Fork 0

Daikeair/Java-Interview-Advanced

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
70.md 955 Bytes
一键复制 编辑 原始数据 按行查看 历史
leelovejava 提交于 2020-04-13 11:03 . 第三季 网络安全

70、到底有哪些操作在Java规范中是不保证原子性的呢?

所有变量的简单赋值写操作,java语言规范原生给你保证原子性的;32位java虚拟机里的long/double是不保证赋值写的原子性的;volatile可以解决这个问题;不保证原子性的一些操作呢?

i++

i = y + 1

i = x * y ==> 先把x和y分别从主内存里加载到工作内存里面来,然后再从工作内存里加载出来执行计算(处理器),计算后的结果写回到工作内存里去,最后还要从工作内存里把i的最新的值刷回主内存

CAS,AtomicInteger => compareAndSet

你敢说他是原子的?

volatile x = 1;
  
volatile y = 2;
  
volatile i = x * y;

我之前给大家已经说过了,画图都演示过了

FSDirectory dir = ...
  
synchronized(dir) {
  
  dir.add();
  
  dir.remove();
  
  dir.insert();
  
}  

加锁

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/daikeair/Java-Interview-Advanced.git
git@gitee.com:daikeair/Java-Interview-Advanced.git
daikeair
Java-Interview-Advanced
Java-Interview-Advanced
master

搜索帮助

Cb406eda 1850385 E526c682 1850385