单例模式——饿汉式与懒汉式
单例模式是一种设计模式,即该类实例化后实例对象永远只有一个称为单例。
这里介绍两种实现方式,饿汉式与懒汉式。其中饿汉式是线程安全的,懒汉式线程不安全需要加锁。
两种方式的实现结果分别如下
先看饿汉式
/**
* 单例设计模式,饿汉式
*/
public class Singleton {
private Singleton(){
}
private static Singleton singleton = new Singleton();
public static Singleton getSingle(){
return singleton;
}
}
再看懒汉式,这里为了线程安全已经加了锁
/**
*
* 单例设计模式,懒汉式
*/
public class Singleton2 {
private Singleton2(){
}
private static Singleton2 singleton2 = null;
public static Singleton2 getSingleton2(){
if (singleton2==null){
synchronized (Singleton2.class){
if (singleton2==null){
singleton2=new Singleton2();
}
}
}
return singleton2;
}
}
接着调用两个实例,来看看是否是单例。
/**
* 单例模式
*/
public class SingleMain {
public static void main(String[] args) {
//饿汉式
Singleton single1 = Singleton.getSingle();
Singleton single2 = Singleton.getSingle();
System.out.println(single1==single2);
//懒汉式
Singleton2 singleton1 = Singleton2.getSingleton2();
Singleton2 singleton2 = Singleton2.getSingleton2();
System.out.println(singleton1==singleton2);
}
}
结果是两个true,可见new的两个对象是同一个,实现了单例模式。