java - Volatile 上的原子变量
问题描述
由于原子变量是易变的,即使您只需要易失性方面,总是使用原子变量有什么缺点吗?
解决方案
变量不能是原子的。原子性和易失性之间有明显的区别。
原子性:如果在给定时间只有一个线程可以执行一组指令,则该操作称为原子性。
易变的:易变的性质确保了可见性。如果一个线程修改了某个易失性状态,其他线程将获得最近更新的状态。
例子 :
volatile boolean flag;
public void flipTheFlag(){
if(flag == true){
flag = false;
}else{
flag = true;
}
}
如果多个线程在操作flipTheFlag,即使flag是volatile变量,flag的值也不确定。这就是为什么 FlipTheFlag 操作必须是 Atomic 的。我们可以通过添加关键字'synchronized'来使flipTheFlag操作原子化。
推荐阅读
- flask - 如何为我的传单函数引用 app.py 中的变量?
- sql-server - 当 EXECUTE AS user = 'dbo' 时,拒绝查看/查询其他数据库对象的权限
- mysql - 在以逗号分隔的 ID 字符串中查找 ID
- c# - 为什么在用测试数据填充数据库时出现异常(EF Core - ASP-NET Core)
- python - Python多线程输出到CSV文件
- python - tkinker 屏幕创建屏幕条目失败
- javascript - 酶反应 17.0.1
- c# - Gridview 无法解析输入字符串不正确
- css - 删除类时CSS过渡不起作用
- javascript - 如何从 Stripe Connect 正确获取 Account ID 到前端?