【发布时间】:2020-08-04 19:40:18
【问题描述】:
我在 quora (https://www.quora.com/Can-we-create-mulitple-instances-of-singleton-classes-in-Java-if-so-how-if-not-then-why) 上看到了一个答案,该答案建议创建一个单例实例的 ConcurrentHashMap '由标识字符串键入',但我不确定这将如何工作。这是我的尝试:
public class SingletonClass {
static ConcurrentHashMap<String, SingletonClass> list = new ConcurrentHashMap<String, SingletonClass>();
private static SingletonClass instance = null;
static String name;
public SingletonClass() {
this.name = "";
}
public SingletonClass(String name) {
this.name = name;
}
public SingletonClass getInstance(String key) {
SingletonClass result = list.get(key);
if(result == null) {
instance = new SingletonClass(name);
list.putIfAbsent(key, instance);
result = instance;
}
return result;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
我不知道如何继续或如何创建它的实例并将键值对存储在列表中,然后根据特定键再次检索值?任何帮助将不胜感激。
【问题讨论】:
-
1.将构造函数设为私有, 2. 使用
SingletonClass.getInstance("whatever");创建对象。getInstance方法负责将单例作为单例,只要构造函数是私有的并且不在类中的其他任何地方使用。 -
@dan1st 如果我想跨不同的类创建多个 SingletonClass 对象并能够调用它们怎么办?
-
使用一个静态“注册”类有所有单例的映射。创建时,类调用 register 类中的方法注册它或失败/返回对象
-
我对你的措辞有点困惑。您是否希望实例化多个 Singleton 类?如果是这样,你不知道。单例的要点是该类只有一个实例。如果您希望获得对该 Singleton 的多个引用,
getInstance()方法应该是public和static,以便可以从程序中的任何位置调用它来获取引用。 -
@TimHunter 感谢您的回复并为造成的混乱道歉;实际上我的意思是实例化多个 Singleton 类,并且想知道它是否可以实现?我觉得我可能误解了 Quora 的最初答案......
标签: java singleton concurrenthashmap