public class MutilSingleton{private static Integer maxNum = 2;//指定固定数量private static ArrayList<MutilSingleton> list = new ArrayList();//容纳所有的MutilSingleton对象static{ //初始化list集合for(int i=0; i<maxNum; i++){list.add(new MutilSingleton());}}private MutilSingleton(){}public static MutilSingleton getInstance(){//获取随意一个MutilSingleton实例Random ran = new Random();Integer index = ran.nextInt(maxNum);return list.get(index);}public void doSomething(){//逻辑处理}}同样地:该实例在并发情况下会出现线程不安全的问题,解决方法依然是在获取MutilSingleton实例的方法上添加synchronized关键字。
4.工厂模式下的单例模式
// 单例类public class Singleton{private Singleton(){}}//工厂类public class SingletonFacotry{private static Singleton singleton;static{//在类加载的时候初始化单例类,只会被加载一次。try{Class cls = Class.forName(singleton.getClass().getName()); //获得单例类的类加载器Constructor con = cls.getDeclaredConstructor();con.setAccessible(true);singleton = (Singleton) con.newInstance();}catch(Exception e){e.printStackTrace();}}public Singleton getInstance(){//给外部提供获取单例类的方法return singleton;}}