package cn.yang.test.controller;
/**单例模式
* Created by Dev_yang on 2016/2/26.
*/
public class Singleton {
//多线程环境需要加上volatile,保证内存可见性
private volatile static Singleton singleton;
private Singleton(){}
/*在方法上面加 synchronized会导致程序运行效率很低,
public static synchronized Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}*/
//更好的解决方案
public static Singleton getInstance(){
if(singleton==null){
//只有singleton==null才需要考虑多线程问题,所以只在这个地方加同步就可以了
synchronized(Singleton.class){
if(singleton==null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
上面是懒汉式的例子,也可以改成下面这种饿汉式
public class Singleton {
private static Singleton singleton=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}