具有同步支持的自动增量数

时间:2017-06-23 10:49:19

标签: java concurrency

我需要生成唯一的自动增量ID,它将从0开始。下面是我的用例。 我有两个领域。一个是前缀,另一个是数字。 保存每条记录时自动增加数字并用前缀汇总并保存。 前缀#test- 数字#0 在保存连接两个值之前,如(test-0)。 任何人都可以帮助我解决这个问题。

2 个答案:

答案 0 :(得分:3)

您可以使用随Java 7一起发布的AtomicInteger或AtomicLong类:

文档:https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html

实施例: http://tutorials.jenkov.com/java-util-concurrent/atomicinteger.html

  

AtomicInteger类为您提供了一个int变量,该变量可以原子方式读取和写入,并且还包含像compareAndSet()这样的高级原子操作。 AtomicInteger类位于java.util.concurrent.atomic包中。

     

AtomicInteger最常见的用途是处理由不同线程同时访问的计数器.java.util.concurrent。 Atomic包提供了非常有用的类,支持对单个变量进行无锁和线程安全编程。

private static AtomicInteger at = new AtomicInteger(0);

通过传递0,您可以使用0初始化它(默认值)。之后,你可以连接前缀(静态变量)并连接它们的例子:

test+at.getAndIncrement(); // getAndIncrement() - Atomically increments by one the current value.

我希望这会有所帮助。

答案 1 :(得分:3)

Ignite是使用prefix.Ignite序列id生成器的开源支持序列生成器。Link

或者 你可以使用key作为前缀和AtomicInteger作为value来创建concurrentHashMap。你需要某种持久性,因为如果你的服务器重新启动内存中的值不应该从零开始。