类实例 - 仅为类创建特定的实例计数 - 多线程环境

时间:2015-04-08 05:10:17

标签: java design-patterns singleton

需要为JVM中的特定类创建指定数量的实例

Singleton pattern一样,我们只管理和创建一个实例。

现在假设为class Abc,我只想

1。)最多只创建3个实例。

2.。)多线程环境。

class Abc{
  private static Abc abc1;
  private static Abc abc2;
  private static Abc abc3;

private Abc(){

}

 public static synchronized Abc getInstance1(){
        if(abc1 == null){
            abc1 = new Abc();
        }
        return abc1;
    }

: // same as above for abc2
: // same as above for abc3

}

**现在问题是我想将实例从总数3增加到4或5或n数。

我还想公开这么多方法(getInstance1(), getInstance2()... etc)

1 个答案:

答案 0 :(得分:0)

看起来你想要每个线程一个实例。

为此提供或开箱即用的解决方案,像Guice,spring等许多其他DI容器。

如果您真的想自己这样做,可以使用地图为每个线程保留一个实例。

public class Abc {

    private static Map<Long, Abc> instances = new HashMap<Long, Abc>();

    //hiding the constructor
    private Abc() { }

    public static Abc getInstance() {
        Long threadId = Thread.currentThread().getId();
        if (!instances.containsKey(threadId)) {         
            instances.put(threadId, new Abc());
        }
        return instances.get(threadId);
    }

}