最近在一些博客上面看到的单例模式,无一例外都是饿汉和懒汉,这两个确实是单例模式,但是各有自己的弊端
先上代码吧
//饿汉式 class ClassA{ private static final ClassA instance = new ClassA(); public static ClassA newInstance(){ return instance; } private ClassA(){} } //懒汉式 class ClassB{ private static ClassB instance = null; public static synchronized ClassB newInstance(){ if (instance == null) instance = new ClassB(); return instance; } private ClassB(){} } 不管饿汉式还是懒汉,都有自己的弊端。 一般用到单例模式的对象,都是比较占用内存。饿汉在类加载的时候,就创建了对象,在实际开发中,特别占用内存;懒汉虽然没有在类加载的时候创建对象,但是效率极低,毕竟有synchronized加锁,在现在多线程的时候,效率自然而然就降低了,下面分享一个两全其美的办法class ClassC{ private static class Holder{ static ClassC instance = new ClassC(); } public static ClassC newInstance(){ return Holder.instance; } private ClassC(){} } 这个方法,利用了静态内部类,这样,在类加载的时候并不会加载静态内部类,而且也完美的解决的多线程并发的问题(因为静态内部类只会在创建一次)。
第一次写博客,如果有什么不对的地方请在回复指教。
