单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式都不会陌生。一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式。
单例模式: 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。
- 饿汉式:
public class Singleton{
private final stiatic Singleton instance = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return instance;
}
}
优点:这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。
缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例,
则会造成内存的浪费。
- 懒汉式
public class Singleton{
private final static Singleton instance;
private Singleton(){
}
public static Singleton getInstance(){
if(singleton == null){
instance = new Singleton();
}
return instance;
}
}
这种写法起到了Lazy Loading的效果,但是只能在单线程下使用。如果在多线程下,
一个线程进入了if (singleton == null)判断语句块,还未来得及往下执行,另一个线程也通过了这个判断语句,
这时便会产生多个实例。所以在多线程环境下不可使用这种方式。
网友评论