【发布时间】:2017-10-18 14:17:18
【问题描述】:
Atomic Integer incrementAndGet() 方法线程安全吗?我没有看到任何使用 synchronized 关键字。我正在使用以下代码生成唯一 ID:
public enum UniqueIdGenerator {
INSTANCE;
private AtomicLong instance = new AtomicLong(System.currentTimeMillis());
public long incrementAndGet() {
return instance.incrementAndGet();
}
}
我想知道调用该方法生成唯一 ID 的多个线程是否会导致任何问题。
UniqueIdGenerator.INSTANCE.incrementAndGet()
谢谢!
【问题讨论】:
-
是的。
AtomicLong也是。 -
docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/…。这与 AtomicInteger 的 javadoc 的第一句有关。它说:支持对单个变量进行无锁线程安全编程的类的小型工具包
-
它不仅是线程安全的,而且事实上它的线程安全是使用它的唯一原因(与普通的
int不同)。
标签: java multithreading atomicinteger