Java 原子整数类不一致性

Java 原子整数类不一致性,java,oop,Java,Oop,我使用一个AtomicInteger类来增加customerID和productID的值。 我没有数据库,但我使用序列化来存储应用程序的状态及其基于命令的应用程序。每次我添加客户或产品时,他们的构造函数都会调用具有AtomicInteger的IDGenerateor类来创建ID。 但是有不一致的地方,有时它会增加ID,有时不会,有人能告诉我出了什么问题吗 public final class IdGenerator implements Serializable { private stat

我使用一个AtomicInteger类来增加customerID和productID的值。 我没有数据库,但我使用序列化来存储应用程序的状态及其基于命令的应用程序。每次我添加客户或产品时,他们的构造函数都会调用具有AtomicInteger的IDGenerateor类来创建ID。 但是有不一致的地方,有时它会增加ID,有时不会,有人能告诉我出了什么问题吗

public final class IdGenerator implements Serializable
{
  private static AtomicInteger nextID = new AtomicInteger();

  public static int newID() 
  {
    return nextID.incrementAndGet();
  }
}



public Customer (String name, String email, String phone, Address address) 
{
    this.name = name;
    this.email = email;
    this.phone = phone.replaceAll("[\\s\\-()]", ""); // drop all non-digit characters
    this.address = address;
    this.ID = IdGenerator.newID();
    this.facebook="";
    this.twitter="";
    this.deliveryInstructions="";
}

你能告诉我们调用IdGenerator类的构造函数代码吗?你是说有时候你会得到两个ID相同的
Customer
对象?这听起来不太可能-你能创建一个简短但完整的程序来演示这个问题吗?@JonSkeet没错,实际上这是一个巨大的程序,所以不知道如何缩短程序演示。是否有其他方法共享代码?@Learner如何创建客户,使用什么构造函数,这个类是否有其他构造函数?相同的实际ID是什么?@Learner:不,因为我认为你不会发现有人想通过你庞大的程序。相反,你应该努力找到一种方法,用一个简短的程序来演示它。获取一份代码副本,然后将其大范围删除,直到程序消失——此时,您将恢复最后删除的内容,并删除较小的内容,等等。但我非常怀疑问题是否存在于
AtomicInteger
中。你知道如果你再次运行你的程序,你会从一个新的计数器开始,对吗?这可能是问题所在吗?