> **第一次写博客,望各位大神多多指教.**
单例模式:
大意:通过对构造方法的私有化,确保整个classloader对于该类只存在唯一的一个实例化对象;
作用:采用单例模式,能够很好的减少系统开销;通过减少new关键字的使用,能够有效的减少gc发生的频率,以及缩短gc的周期;
实现方式:
1)饿汉式:通过JVM对static的初始化机制,解决了线程安全的问题,但是无法租到延迟加载。
public class Singleton{
public static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance()
{
return instance;
}
}
2)懒汉式:解决了延迟加载,但是通过synchronized关键字来实现线程安全,影响了性能。
public class Singleton{
public static Singleton instance;
private Singleton(){}
public static Singleton getInstance()
{
if(instance==null)
{
synchronized(Singleton.Class)
{
if(instance==null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
3)内部类:利用JVM类的加载机制实现,解决了以上两种方式的不足,但还是能够通过JAVA的反射、序列化机制等来破坏
public class Singleton{
private Singleton(){}
private Class InnerClass
{
public static Singleton instance = new Singleton()
}
public static Singleton getInstance()
{
return InnerClass.instance
}
}
4)枚举类:利用JVM对EUM的保护限制还实现单例
public enum Singleton{
instance;
}