Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单例实例的ConcurrentHashMap_Java_Singleton_Concurrenthashmap - Fatal编程技术网

Java 单例实例的ConcurrentHashMap

Java 单例实例的ConcurrentHashMap,java,singleton,concurrenthashmap,Java,Singleton,Concurrenthashmap,我在quora()上看到了一个答案,建议创建一个ConcurrentHashMap,其中的单例实例“由一个标识字符串键入”,但我不确定这是如何工作的。以下是我的尝试: public class SingletonClass { static ConcurrentHashMap<String, SingletonClass> list = new ConcurrentHashMap<String, SingletonClass>(); private static Si

我在quora()上看到了一个答案,建议创建一个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;
}
public类SingletonClass{
静态ConcurrentHashMap列表=新ConcurrentHashMap();
私有静态SingletonClass实例=null;
静态字符串名;
公共单音类(){
this.name=“”;
}
公共单例类(字符串名称){
this.name=名称;
}
公共单例类getInstance(字符串键){
SingletonClass结果=list.get(键);
如果(结果==null){
实例=新的SingletonClass(名称);
列表。putIfAbsent(键、实例);
结果=实例;
}
返回结果;
}
公共字符串getName(){
返回此.name;
}
公共void集合名(字符串名){
this.name=名称;
}
我不知道如何继续,也不知道如何创建该实例,并在列表中存储一个键、值对,然后根据特定键再次检索该值?如有任何帮助,将不胜感激。

  • 您正在创建多个实例,那么这是一个单实例吗?不是
  • getInstance()
    在任何情况下都应该是静态的
  • 您在
    getInstance()
    方法中使用一个静态变量是毫无原因的,您可以通过这种方式将此代码打开到一个竞速条件(好吧,多个竞速条件)。并且此变量是不必要的,请在该方法的范围内执行所有操作
  • 这不是一个单例模式,这是一个对象的集合-与Java中的包装类(Integer、Long等)相同
关键是,使用这种方法,不会有两个对象具有相同的键

//使用您的方法
SingletonClass one=SingletonClass.getInstance(“someKey”);
SingletonClass 2=SingletonClass.getInstance(“someKey”);
System.out.println(one==two);//true,同一个对象
//没有你的方法
SingletonClass三=新的SingletonClass(“someKey”);
SingletonClass四=新的SingletonClass(“someKey”);
System.out.println(三==四);//false,不同的对象
节省内存,可能是创建对象的时间,也可能是gc周期的时间。

  • 您正在创建多个实例,那么这是一个单实例吗?不是
  • getInstance()
    在任何情况下都应该是静态的
  • 您在
    getInstance()
    方法中使用一个静态变量是毫无原因的,您可以通过这种方式将此代码打开到一个竞速条件(好吧,多个竞速条件)。并且此变量是不必要的,请在该方法的范围内执行所有操作
  • 这不是一个单例模式,这是一个对象的集合-与Java中的包装类(Integer、Long等)相同
关键是,使用这种方法,不会有两个对象具有相同的键

//使用您的方法
SingletonClass one=SingletonClass.getInstance(“someKey”);
SingletonClass 2=SingletonClass.getInstance(“someKey”);
System.out.println(one==two);//true,同一个对象
//没有你的方法
SingletonClass三=新的SingletonClass(“someKey”);
SingletonClass四=新的SingletonClass(“someKey”);
System.out.println(三==四);//false,不同的对象

节省内存,可能是创建对象的时间,也可能是gc周期的时间。

1.使构造函数私有化,2.使用
SingletonClass.getInstance(“任意”)创建对象;
getInstance
方法处理单例作为单例的问题,只要构造函数是私有的,并且不在类中的任何其他地方使用。@dan1st如果我想跨不同的类创建多个单例类对象并能够调用它们,该怎么办?使用一个静态“寄存器”类有所有单例的映射。创建时,一个类调用register类中的一个方法来注册它或失败/返回对象。我对你的措辞有点困惑。你想实例化多个单例类吗?如果是,你不想。单例的重点是该类只有一个实例。如果你想要获取对该单例的多个引用,
getInstance()
方法应该是
public
static
,这样就可以从程序中的任何地方调用它来获取引用。@TimHunter感谢您的回答,并对混淆表示歉意;事实上,我的意思是实例化多个单例类,我想知道是否可以实现它?我觉得我可能误解了I来自Quora的初始答案…1.使构造函数私有,2.使用
SingletonClass.getInstance(“任意”)创建对象;
getInstance
方法处理单例作为单例的问题,只要构造函数是私有的,并且不在类中的任何其他地方使用。@dan1st如果我想跨不同的类创建多个单例类对象并能够调用它们,该怎么办?使用一个静态“寄存器”类有所有单例的映射。创建时,一个类调用register类中的一个方法来注册它或失败/返回对象。我对你的措辞有点困惑。你想实例化多个单例类吗?如果是,你不想。单例的重点是该类只有一个实例。如果你想要获取对该单例的多个引用,
getInstance()
方法应该是
public
static
,这样就可以从程序中的任何地方调用它来获取引用。@TimHunter感谢您的回答,并对混淆表示歉意;事实上,我的意思是实例化多个单例类,我想知道是否可以实现它?我觉得我可能误解了IQuora的初步回答…感谢您的回答-我觉得我可能误解了Quora关于单例实例ConcurrentHashMap的回答。您的单例类3和单例类4的示例与我试图创建的一致