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
内部问题类
不仅是AtomicInteger
和AtomicLong
, primefaces包类是线程安全的。
java.util.concurrent.atomic
一个小型工具包,支持对单个变量进行无锁线程安全编程。
本质上,此包中的类将volatile值,字段和数组元素的概念扩展为也提供表单的primefaces条件更新操作的概念 :
boolean compareAndSet(expectedValue, updateValue);
类AtomicBoolean
, AtomicInteger
, AtomicLong
和AtomicReference
实例分别提供对相应类型的单个变量的访问和更新。 每个类还为该类型提供适当的实用方法。 例如,类AtomicLong
和AtomicInteger
提供primefaces增量方法。
是! 它是java.util.concurrent包的一部分。
是。 实际上,这是实现AtomicLong
的既定目标之一 :
AtomicLong
用于诸如primefaces递增序列号的应用程序中
同时访问incrementAndGet
的多个线程中的每一个都将获得唯一的编号。