62,628
社区成员
发帖
与我相关
我的任务
分享
,只是你那个懒汉模式和饿汉模式的顺序是不是弄反了?饿汉模式才是在类加载时就创建对象吧public class Main {
String hello = "Hello";
//静态变量实现单例,适用于懒汉模式创建
static final Main Instance = new Main();
static Main _instance = null;
//静态方法实现单例,适用于饿汉模式创建
static Main newInstance(){
if(_instance == null){
synchronized (Main.class) {
if(_instance == null){
_instance = new Main(); //这里调用Main的构造函数
}
}
}
return _instance;
}
Main(){
System.out.println("Main class created");
}
public static void main(String[] args) throws InterruptedException {
System.out.println("App start");
Main sigCls = Main.Instance; //static单例变量的访问
System.out.println(sigCls.hello);
sigCls = Main.newInstance(); //static单例方法的访问
System.out.println(sigCls.hello);
}
}
可以看到,使用static变量的方式来进行单例实现,对象的创建写在方法之外,并且对象会在类加载的时候进行创建(也就是懒汉模式),不是很灵活(创建时只能访问static变量或者方法)。使用static方法的方式来进行单例实现,对象的创建写在方法之内,并且对象只会在调用该方法时进行创建(也就是饿汉模式),这种写法比较复杂,但是很灵活。
=============
好啦,废话不说了,对于你说的“安卓多个Activity控制同一个实例”的单例的话,如果你这个实例的创建代价比较大,就用static方法来创建,如果创建代价不是很大的话,就用static变量就行啦