本文主要是介绍《Java高并发程序设计》学习 --5.1 探讨单例模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
它是一种对象创建模式,用于产生一个对象的具体实例,确保系统中一个类只有一个实例。这样带来的好处主要有两点:
1. 对于频繁使用的对象,可以省略new操作花费的时间,这样对于那些重量级对象而言,可以节省非常可观的一笔系统开销。
2. 由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间。
下面给出了一个单例的实现,这个实习生非常简单的,但无疑是一个正确并且良好的实现。
public class Singleton {private Singleton() {System.out.println("Singleton is create");}private static Singleton instance = new Singleton();public static Singleton getInstance() {return instance;}
}
若想精确控制instance的创建时间,具体实现如下:
public class LazySingleton {private LazySingleton() {System.out.println("LazySingleton is create");}private static LazySingleton instance = null;public static synchronized LazySingleton getInstance() {if(instance == null)instance = new LazySingleton();return instance;}
}
将上述两种方法优势结合的方法:
public class StaticSingleton {private StaticSingleton () {System.out.println("StaticSingleton is create");}private static class SingletonHolder {private static StaticSingleton instance = new StaticSingleton();}public static StaticSingleton getInstance() {return SingletonHolder.instance;}
}
上述代码实现了一个单例,并且同时拥有前两种方式的优点。首先getInstance()方法中没有锁,这使得在高并发环境下性能优越。其次,只有在getInstance()方法被第一次调用时,StaticSingleton的实例才会被创建。因为这种方法巧妙地使用了内部类和类的初始化方式。内部类SingletonHolder被申明为private,这使得我们不可能在外部访问并且初始化它。而我们只可能在getInstance()内部对SingletonHolder类进行初始化,利用虚拟机的类初始化机制创建单例。
注:本篇博客内容摘自《 Java 高并发程序设计》
这篇关于《Java高并发程序设计》学习 --5.1 探讨单例模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!