单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间;能够避免由于操作多个实例导致的逻辑错误。
如果一个对象有可能贯穿整个应用程序,而且起到了全局统一管理控制的作用,那么单例模式也许是一个值得考虑的选择。一些管理器和控制器常被设计成单例模式。
实现1-普通
public class SingletonClass { private static final SingletonClass INSTANCE = new SingletonClass(); private SingletonClass() { } public static SingletonClass getInstance() { return INSTANCE; } }
---借助AccessibleObject.setAccessible方法,通过反射机制调用私有构造器会破坏Singleton
实现2-枚举
public enum EnumSingleton { INSTANCE; public String other() { return "other"; } }
---利用枚举的特性
实现3-静态内部类
public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){ } public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } }
---
单例测试类:
class SingletonTest implements Runnable { private static CountDownLatch latch = new CountDownLatch(1); static Set<String> set = new ConcurrentSkipListSet<String>(); @Override public void run() { try { latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } set.add(SingletonClass2.getInstance().toString()); } public static void main(String[] args) throws Exception { for (int k = 0; k < 2000; k++) { SingletonTest tt = new SingletonTest(); Thread t = new Thread(tt); t.start(); } //释放锁 latch.countDown(); Thread.sleep(2000); System.out.println(set.size()); } }
---
end