如果您只是设置和获取值,是否有使用AtomicLong的优势?

时间:2015-09-09 08:27:54

标签: java atomic-long

我需要一个长实例变量 此变量将保留一些事件时间(以毫秒为单位的时间) 如果我只将值设置为此长并获取值,则 有没有使用AtomicLong(只有它的get()和set())而不是长的优势?

3 个答案:

答案 0 :(得分:2)

查看AtomicLong

的文档
  

AtomicLong用于诸如原子递增的序列号等应用程序中,不能用作Long 的替代品。

此特定类旨在用于多线程环境以确保线程安全。

除非您需要线程安全,否则请勿使用它。如果您只想要那些方法,可以为长变量提供自己的getter和setter。

答案 1 :(得分:1)

是的,有优势。

  1. 在多线程环境中,您将在线程之间获得可预测的结果。
  2. 这是一个方便可变的长。
  3. 但是,如果您没有在多线程环境中进行操作,并且您想要的只是一个可变的长度,那么您最好使用自己的可变对象。在这种情况下使用AtomicLong会让其他人感到困惑,并会执行不必​​要的缓存管理。

答案 2 :(得分:0)

如果你没有在自己的更新中使用它的值,你就不需要它了,但是如果你打算做var.set(1 + var.get())之类的东西,你可以在那里使用几个线程& #39; s等等,这种可能性:

线程1:x = var.get(); X = X + 1;

线程2:y = var.get(); Y = Y + 1;

线程1:var.set(x);

线程2:var.set(y);

根据该序列,用户希望该值增加2,但他们会看到它仅增加了1