需要为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)
看起来每个线程都需要一个实例。
有现成的解决方案,DI容器,如Guice、spring和许多其他容器。
如果你真的想自己做这件事,你可以使用映射为每个线程保留一个实例。
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);
}
}