41

有人可以解释 AtomicLong 的用途吗?例如,以下语句有什么区别?

private Long transactionId;
private AtomicLong transactionId;
4

1 回答 1

46

这两个对象之间存在显着差异,尽管最终结果相同,但它们肯定是非常不同的,并且在非常不同的情况下使用。

在以下情况下使用基本Long对象:

  • 你需要包装类
  • 您正在处理一个集合
  • 你只想处理对象而不是原语(有点效果)

您使用AtomicLongwhen:

  • 您必须保证该值可以在并发环境中使用
  • 您不需要包装类(因为此类不会自动装箱)

Long本身不允许线程互操作性,因为两个线程都可以看到和更新相同的值,但是使用AtomicLong,围绕多个线程将看到的值有相当不错的保证。

实际上,除非您费心使用线程,否则您不需要使用AtomicLong.

于 2016-02-22T06:59:37.500 回答