Atomic Integer incrementAndGet()线程安全吗?

primefaces整数incrementAndGet()方法线程安全吗? 我没有看到在其中使用synchronized关键字。 我使用以下代码生成唯一ID:

public enum UniqueIdGenerator { INSTANCE; private AtomicLong instance = new AtomicLong(System.currentTimeMillis()); public long incrementAndGet() { return instance.incrementAndGet(); } } 

如果调用该方法生成唯一ID的多个线程会导致任何问题,我会徘徊吗?

 UniqueIdGenerator.INSTANCE.incrementAndGet() 

谢谢!

是的。 它使用其他的,而不是同步的,更高效的线程安全机制,基于名为Unsafe内部问题类

不仅是AtomicIntegerAtomicLong , primefaces包类是线程安全的。

 java.util.concurrent.atomic 

一个小型工具包,支持对单个变量进行无锁线程安全编程。

本质上,此包中的类将volatile值,字段和数组元素的概念扩展为也提供表单的primefaces条件更新操作的概念

 boolean compareAndSet(expectedValue, updateValue); 

AtomicBooleanAtomicIntegerAtomicLongAtomicReference实例分别提供对相应类型的单个变量的访问和更新。 每个类还为该类型提供适当的实用方法。 例如,类AtomicLongAtomicInteger提供primefaces增量方法。

是! 它是java.util.concurrent包的一部分。

是。 实际上,这是实现AtomicLong的既定目标之一 :

AtomicLong用于诸如primefaces递增序列号的应用程序中

同时访问incrementAndGet的多个线程中的每一个都将获得唯一的编号。

Interesting Posts