Java 原子整数类不一致性
我使用一个AtomicInteger类来增加customerID和productID的值。 我没有数据库,但我使用序列化来存储应用程序的状态及其基于命令的应用程序。每次我添加客户或产品时,他们的构造函数都会调用具有AtomicInteger的IDGenerateor类来创建ID。 但是有不一致的地方,有时它会增加ID,有时不会,有人能告诉我出了什么问题吗Java 原子整数类不一致性,java,oop,Java,Oop,我使用一个AtomicInteger类来增加customerID和productID的值。 我没有数据库,但我使用序列化来存储应用程序的状态及其基于命令的应用程序。每次我添加客户或产品时,他们的构造函数都会调用具有AtomicInteger的IDGenerateor类来创建ID。 但是有不一致的地方,有时它会增加ID,有时不会,有人能告诉我出了什么问题吗 public final class IdGenerator implements Serializable { private stat
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
中。你知道如果你再次运行你的程序,你会从一个新的计数器开始,对吗?这可能是问题所在吗?