单例模式的主要作用是保证在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