1.模式的定义
单例模式(SingletonParrten):保证一个类只有一个实例,并提供一个访问它的全局访问点
2.模式的实现
创建单例模式需要三方面操作
1.创建一个对象
2.定义一个私有构造方法(禁止外部类对其进行实例化)
3.提供一个对外访问的方法
单例模式可以通过懒汉式和饿汉式来实现。
懒汉式-线程不安全
/**
* 懒汉式-单例模式
* 线程不安全
* 在多线程的程序中,多个线程同时访问Singleton类,调用getInstance实例会有可能造成创建多个实例的。
*/
public class Singleton {
private static Singleton instance;
private Singleton(){};
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
懒汉式-线程安全
/**
* 懒汉式-单例模式
* 线程安全
*/
public class Singleton {
private static Singleton instance;
private Singleton(){};
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
懒汉式-线程安全(双重锁定)
/**
* 懒汉式-单例模式
* 线程安全
* 双重锁定
*/
public class Singleton {
private static Singleton instance;
private Singleton(){};
public static synchronized Singleton getInstance(){
if(instance == null){
synchronized (Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
饿汉式
/**
* 饿汉式
*/
public class Singleton{
private static final Singleton instance = new Singleton();
private Singleton(){};
public static Singleton getInstance() {
return instance;
}
}
(声明:本文为个人学习笔记,观点非原创。如有问题,欢迎讨论。)