java - Java 中的 AtomicLong 是用来做什么的?

标签 java atomic-long

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

private Long transactionId;
private AtomicLong transactionId;

最佳答案

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

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

  • 你需要包装类
  • 您正在处理一个集合
  • 您只想处理对象而不是基元(这有点行得通)

您在以下情况下使用 AtomicLong:

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

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

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

关于java - Java 中的 AtomicLong 是用来做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35546956/

相关文章:

java - 如何撤消任何功能

java - 高效使用 GAE DataStore

java - 使用单一方法的 OO 解决方案

java - 如何保证AtomicLong addAndGet结果的正确性

java - AtomicLong 中的 getAndAdd 方法是否会导致线程等待?

java - AtomicLong 的 incrementAndGet 方法在内部如何工作?

java - 新的 Java 技术 JAXX

java - 错误 : "No error in nativeDrain" caused by OutputStream. 刷新()