Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 如何创建一个singleton类的3个对象并调用它6次,但如果我们调用它第4次,则应显示第一个对象,依此类推_Java - Fatal编程技术网

Java 如何创建一个singleton类的3个对象并调用它6次,但如果我们调用它第4次,则应显示第一个对象,依此类推

Java 如何创建一个singleton类的3个对象并调用它6次,但如果我们调用它第4次,则应显示第一个对象,依此类推,java,Java,使用getInstance方法创建MySingleton对象的类 public class MySingleton { static int counter = 0; public static void main(String[] args) { MySingleton[] arr = new MySingleton[3]; arr[0] = new MySingleton(); arr[1] = new MySinglet

使用
getInstance
方法创建MySingleton对象的类

public class MySingleton {

    static int counter = 0;

    public static void main(String[] args) {

        MySingleton[] arr = new MySingleton[3];
        arr[0] = new MySingleton();
        arr[1] = new MySingleton();
        arr[2] = new MySingleton();
        System.out.println(arr[counter].getInstance());
    }
    public static MySingleton getInstance() {

        if (counter < 3) {
              counter++;
            } else {
              counter = 0;
            }
        return new MySingleton;
    }
}
公共类MySingleton{
静态整数计数器=0;
公共静态void main(字符串[]args){
迈辛格尔顿[]arr=新迈辛格尔顿[3];
arr[0]=new MySingleton();
arr[1]=new MySingleton();
arr[2]=new MySingleton();
System.out.println(arr[counter].getInstance());
}
公共静态MySingleton getInstance(){
如果(计数器<3){
计数器++;
}否则{
计数器=0;
}
返回新的迈辛格尔顿;
}
}

您需要一个计数器变量,从零开始。每次调用时,递增计数器,当计数器==2时,将其设置回零。
您还需要一个包含3个位置的数组,其中每个单体位于一个位置。
每次调用位于计数器位置的单例时

// first:
MySingleton[] arr = new MySingleton[3];
arr[0] = new MySingleton();
arr[1] = new MySingleton();
arr[2] = new MySingleton();


// then:
if (counter < 3) {
  counter++;
} else {
  counter = 0;
}

// invoking
arr[counter].method();
//首先:
迈辛格尔顿[]arr=新迈辛格尔顿[3];
arr[0]=new MySingleton();
arr[1]=new MySingleton();
arr[2]=new MySingleton();
//然后:
如果(计数器<3){
计数器++;
}否则{
计数器=0;
}
//援引
arr[计数器]。方法();
试试这个: 我假设您访问的时间永远不会超过Long的最大值时间

惰性方法:

private static Map INSTANCE_Map=new ConcurrentHashMap();
私有静态AtomicLong i=新的AtomicLong(0);
私有静态最终int对象_NUM=3;
公共静态MySingleton getInstance(){
长t=i.getAndIncrement();
return INSTANCE_MAP.computeIfAbsent(t%OBJECT_NUM,()->new MySingleton());
}
饥饿法:

private static Map INSTANCE_Map=new HashMap();
静止的{
INSTANCE_MAP.put(0,new MySingleton());
INSTANCE_MAP.put(1,new MySingleton());
INSTANCE_MAP.put(2,new MySingleton());
}
公共静态MySingleton getInstance(){
长t=i.getAndIncrement();
返回实例映射.get(t%OBJECT\u NUM);
}

Thanx@ggbond。computeIfAbsent方法(t%OBJECT_NUM,()->new MySingleton());在这里不适用。可能我必须尝试其他方法。当然,您可以使用初始化的hashMap,我重新编辑了anwsertried,但没有去…我之前已经对我正在工作的要求发表了评论。请检查是否有帮助。我试过了,但它只创建了一个对象。我已经更新了代码。那是因为它是一个单身汉。一个单例应该总是只有一个实例。有关更多信息,请参阅。对。。。但我的要求是…我需要三个新实例来处理三个调用,如果第四个调用,它应该返回第一个实例,如果被调用,它应该返回第五个实例,它应该返回第二个实例,第六个实例,第三个实例,第七个实例,再返回第一个实例等等…如果我不清楚,请告诉我。它不能是3个单例。根据定义,单例只能有一个实例。你确定他们一定是单身吗?如果是这样的话,那么作业是不正确的,因为它不可能完成。这不是一个单件作业。另外,
getInstance()
返回一个
int
而不是类的实例是。。。奇怪的这是一个想法,你可以有一个单身的不同实例。你应该多读一些关于单身模式的书。对不起…我的错。我已经更正了代码。