Atomic Integer incrementAndGet() 线程安全吗?
Is Atomic Integer incrementAndGet() thread safe?
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()
谢谢!
是的!它是 java.util.concurrent 包的一部分。
是的。其实这是one of the stated goals of implementing AtomicLong
:
An AtomicLong
is used in applications such as atomically incremented sequence numbers
同时访问 incrementAndGet
的多个线程中的每一个都将获得一个唯一的编号。
是的,是的。它使用基于内部 JDK class 命名为 Unsafe
的其他而非同步的更高效的线程安全机制
不仅AtomicInteger
和AtomicLong
,atomic包class也是线程安全的。
java.util.concurrent.atomic
A small toolkit of classes that support lock-free thread-safe programming on single variables.
本质上,这个包中的 classes 将易失性值、字段和数组元素的概念扩展到那些还提供表单[=的原子条件更新操作的那些29=]:
boolean compareAndSet(expectedValue, updateValue);
classes AtomicBoolean
、AtomicInteger
、AtomicLong
和 AtomicReference
的实例每个都提供对相应类型的单个变量的访问和更新.每个 class 还为该类型提供适当的实用方法。例如,classes AtomicLong
和 AtomicInteger
提供原子增量方法。
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()
谢谢!
是的!它是 java.util.concurrent 包的一部分。
是的。其实这是one of the stated goals of implementing AtomicLong
:
An
AtomicLong
is used in applications such as atomically incremented sequence numbers
同时访问 incrementAndGet
的多个线程中的每一个都将获得一个唯一的编号。
是的,是的。它使用基于内部 JDK class 命名为 Unsafe
不仅AtomicInteger
和AtomicLong
,atomic包class也是线程安全的。
java.util.concurrent.atomic
A small toolkit of classes that support lock-free thread-safe programming on single variables.
本质上,这个包中的 classes 将易失性值、字段和数组元素的概念扩展到那些还提供表单[=的原子条件更新操作的那些29=]:
boolean compareAndSet(expectedValue, updateValue);
classes AtomicBoolean
、AtomicInteger
、AtomicLong
和 AtomicReference
的实例每个都提供对相应类型的单个变量的访问和更新.每个 class 还为该类型提供适当的实用方法。例如,classes AtomicLong
和 AtomicInteger
提供原子增量方法。