单例模式:
1)一个类只能创建一个实例
2)构造函数和静态变量(加载类时即初始化)需为private
3)get方法应该为public static,可供全局访问
//懒汉模式
public class lazySingleton {
private static volatile lazySingleton singleton=null; //懒,所以就不实例化了,加载类较快,但是第一次访问类可能会有点慢
private lazySingleton(){
//nothing
}
public static lazySingleton getSingleton(){
if(singleton==null){
synchronized (this){
if(singleton==null) //这里的二次判断很有必要啊,在多线程中同时到达第一个if的可能有多个,若此处没有二次二次判断,会导致new singleton()同步执行多次。
singleton=new lazySingleton();
}
}
return singleton;
}
}
//饿汉模式
public class hungrySingleton {
private static final singleton=new hungerySingleton();//此处最好不要丢掉final
private hungrySingleton(){
//noting
}
public static hungrySingleton getSingleton(){
return singleton();
}
}
参考:Singleton单例模式(懒汉方式和饿汉方式)
单例模式中的懒汉和饿汉模式的区别