Java设计的单例模式(三种写法)

    xiaoxiao2021-03-25  99

    最近在一些博客上面看到的单例模式,无一例外都是饿汉和懒汉,这两个确实是单例模式,但是各有自己的弊端

    先上代码吧

    //饿汉式 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(){} } 这个方法,利用了静态内部类,这样,在类加载的时候并不会加载静态内部类,而且也完美的解决的多线程并发的问题(因为静态内部类只会在创建一次)。

    第一次写博客,如果有什么不对的地方请在回复指教。

    转载请注明原文地址: https://ju.6miu.com/read-25456.html

    最新回复(0)