当前位置:嗨网首页>书籍在线阅读

11-使用原子变量替代同步

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

11.4 使用原子变量替代同步

在多线程之间共享数据时,必须使用同步机制来保护对数据的访问。通过在修改数据的方法上声明 synchronized 关键字,能够保证同一时间只有一个线程可以修改数据。当然,也可以使用 Lock 类为修改指令创建一个临界区。

从Java 5开始出现了原子变量。线程在原子变量上执行操作时,原子变量的实现类会通过一种机制检查该操作是否一步就能完成。简单来说,操作首先获取变量的值,然后在本地修改,最后将修改同步给变量。如果同步时变量尚未发生改变,那么它就能成功;否则,该方法将重新执行操作。Java提供了如下类型的原子变量:

  • AtomicBoolean
  • AtomicInteger
  • AtomicLong
  • AtomicReference

在某些场景中,Java的原子变量比同步机制的性能更好(特别是在关注单独变量的原子性时)。 java.util.concurrent 包中的某些类使用原子变量替代同步。本节将展示原子属性是如何提供比同步更好的性能的。