本文主要是介绍Singleton-单例模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 饿汉模式
public class Singleton{//1 将构造方法私有化,不允许外部直接创建对象private Singleton(){}//2 创建类的唯一实例private static Singleton instance=new Singleton();//3 提供一个用于获取实例的方法public static Singleton getInstance(){return instance;}
}
饿汉模式特点是加载类比较慢,但运行时获取对象的速度比较快,线程安全,在一开始就建立这个单例对象
2 懒汉模式
public class Singleton2{//1 将构造方式私有化,不允许直接创建对象 private Singleton2(){}//2 声明类的唯一实例,使用private static 修饰private static Singleton2 instance;//3 提供一个用于获取实例的方法,使用public static 修饰public static Singleton2 getInstance(){if(instance == null ){instance = new Singleton2();}return instance;}
}
懒汉模式特点是加载类时比较快,但运行时获取对象的速度比较慢,线程不安全,因为对象是你使用的时候才去创建
3 线程安全的懒汉模式
public class Singleton3{// 私有构造private Singleton3(){}private static Singleton3 single=null; //等同于 synchronized public static Singleton3 getInstance()public static Singleton3 getInstance(){synchronized(Singleton3.class){// 注意:里面的判断是一定要加的,否则出现线程安全的问题if(single == null){single=new Singleton3();}}return single;}
}
还可以仅仅对需要锁的代码部分加锁,提高效率
public class Singleton3{// 私有构造private Singleton3(){}private static Singleton3 single=null; //等同于 synchronized public static Singleton3 getInstance()public static Singleton3 getInstance(){if(single == null){synchronized(Singleton3.class){// 注意:里面的判断是一定要加的,否则出现线程安全的问题if(single == null){single=new Singleton3();}}}return single;}
}
这篇关于Singleton-单例模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!