单例模式
单例模式确保某一个类只有一个实例,而且自行实例化,这个类提供了访问其唯一对象的方式,可以直接访问,不需要实例化该对象。
单例模式的几种实现方式
1、懒汉式(线程不安全)
public class Singleton{
private static Singleton instance;
//私有构造函数
private Singleton(){}
//静态获取实例的方法
public static Singleton getInstance(){
if(instance==null)
{
instance = new Singleton();
}
return instance;
}
}
2、懒汉式(线程安全)
public class Singleton1 {
private static Singleton1 instance;
private Singleton1(){}
public static synchronized Singleton1 getInstance(){
if(instance == null)
{
instance =new Singleton1();
}
return instance;
}
}
3、饿汉式(线程安全)
public class Singleton2 {
private static Singleton2 instance =new Singleton2();
private Singleton2(){}
public static Singleton2 getInstance()
{
return instance;
}
}
4、双检锁/双重校验锁(DCL,即 double-checked locking,线程安全)
public class Singleton3 {
private volatile static Singleton3 instance;
private Singleton3(){}
public static Singleton3 getInstance(){
synchronized (Singleton3.class){
if(instance == null)
{
instance=new Singleton3();
}
}
return instance;
}
}