单例模式
单例模式作为比较常用的设计模式,在很多场景下都由运用,下面我们来简单聊一聊单例模式的简单实现。
1、懒汉式实现
2、饿汉式实现
3、静态内部类实现
4、双检锁实现
简单实现代码
懒汉式实现代码:
private static Singleton instance = null;
private Singleton(){ }
public static Singleton getSingleton(){
if(instance==null){
return new Singleton();
}
}
饿汉式实现代码:
private static Singleton instance = new Singleton();
private Singleton(){ }
public static Singleton getSingleton2(){
return instance;
}
静态内部类实现代码:
private static Singleton instance;
private Singleton(){ }
private static class NeiBu{
private static final Singleton instance = new Singleton();
}
// 静态内部类实现
public static Singleton getSingleton3(){
return NeiBu.instance;
}
双重检查锁实现代码:
private volatile static Singleton instance = null;
private Singleton(){ }
// 双检锁实现单例模式
public static Singleton getSingleton4(){
if(instance==null){
synchronized (Singleton.class){
if(instance==null){
instance = new Singleton();
}
}
}
return instance;
}
总结
对比发现:懒汉式实现简单,但是在线程安全方面存在问题;饿汉式、静态内部类在多线程下是线程安全的,但是类初始化的时候就创建单例,存在资源浪费;最推荐使用的是双检锁实现单例模式,资源利用率高、又不存在线程不安全的问题。