Skip to content

Latest commit

 

History

History
45 lines (22 loc) · 955 Bytes

File metadata and controls

45 lines (22 loc) · 955 Bytes

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();
  
}  

加锁