一、饿汉模式
类加载的同时,创建实例
java
class Singleton{
private static Singleton instance new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
二、懒汉模式-单线程版
类加载的时候不创建实例,第一次使用的时候才创建实例
java
class Singleton{
private static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
三、懒汉模式-多线程版
上面的懒汉模式的实现是不安全的
加上synchronized可以改善这里的线程安全问题
java
class Singleton{
private static Singleton instance = null;
private Singleton(){}
public synchronized static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
四、懒汉模式-多线程版(改进)
- 以下代码在加锁的基础上,做出了进一步的改动
- 给instance加上volatile
java
class Singleton{
private static volatile Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.calss){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}