首页 > 解决方案 > Volatile 上的原子变量

问题描述

由于原子变量是易变的,即使您只需要易失性方面,总是使用原子变量有什么缺点吗?

标签: javamultithreading

解决方案


变量不能是原子的。原子性和易失性之间有明显的区别。

原子性:如果在给定时间只有一个线程可以执行一组指令,则该操作称为原子性。

易变的:易变的性质确保了可见性。如果一个线程修改了某个易失性状态,其他线程将获得最近更新的状态。

例子 :

volatile boolean flag; 


public void flipTheFlag(){
  if(flag == true){
      flag = false;
  }else{
      flag = true;
  }
}

如果多个线程在操作flipTheFlag,即使flag是volatile变量,flag的值也不确定。这就是为什么 FlipTheFlag 操作必须是 Atomic 的。我们可以通过添加关键字'synchronized'来使flipTheFlag操作原子化。


推荐阅读