对于对象的每次创建,我希望它可以由标识符唯一地访问。我使用递增的静态值来跟踪已创建的对象数量,并且每次构造新对象时,我都会使其标识符等于 count + 1(并递增计数)。我遇到的问题是同步不起作用。这是代码的简化版本:
public static final Hashtable MODULES = new Hashtable();
private static final Object countLock = new Object();
private static int count = 0;
private final String identifier;
private final String name;
public Class(String name) {
this.identifier = String.valueOf(incrementCount());
this.name = name;
MODULES.put(identifier, name);
}
private static int incrementCount() {
synchronized (countLock) {
return ++count;
}
}
现在,当我对此进行测试时(不切实际,诚然,但要确保它有效):
for (int x = 0; x < 100; x++) {
new Thread(new Runnable() {
@Override
public void run() {
Class m = new Class("Name");
}
}).start();
}
System.out.println(Module.MODULES.size());
我的输出从 60 到 100 不等。显然我不想要那种不可靠性。一个不稳定的领域会在这里工作吗?(我尝试过相同的结果)我不确定如何确保每个class
对象都有不同的标识符。欢迎任何解决方案。
注意:出于实现特定的原因,我不访问 java.util.concurrent。