java - Java 中用于唯一 ID 的序列生成器

标签 java multithreading sequence

我打算写一个序列生成器,它将被使用 在发布期间在我的 REST 资源实现类中生成 唯一身份。由于每个发布请求都由单独的线程处理, 我使变量 volatile 和方法同步。 我没有选择使用序列或其他东西 传统的 RDBMS 提供。

public class SequenceGen {
    volatile static int n = 0;  
    public synchronized int nextNum(){
        return n++;
    }   
}

这是我目前所拥有的,并计划创建一个变量 我的 REST 实现中的 SequenceGen。我的实际问题是 它在什么地方坏了?我测试了两个线程,但我没有看到 任何重复的值。

最佳答案

它会起作用,但是 AtomicInteger 是一种非常适合您的用例的内置类型。

AtomicInteger seq = new AtomicInteger();
int nextVal = seq.incrementAndGet();

关于java - Java 中用于唯一 ID 的序列生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22416826/

相关文章:

ios - 串行队列上的 dispatch_async 和 dispatch_sync 之间的区别?

java - 从 shell 脚本运行 java 时为 "No such file or directory"

java - cxf-codegen-plugin 不生成源代码

Java SecurityManager - 设置自定义策略文件

multithreading - JUnit测试未执行测试中创建的所有线程

c++ - 如何检查 vector 中的两个元素是否按一个顺序排列?

java - 将 JSON 解码为具有不同字段类型 jackson 的子类型

python - python 中的线程池没有预期的那么快

c# - 用 10 10 替换字节 10

haskell - 递归列表 zipWith 的空间泄漏