java单例模式下面两种方法有什么区别?
方法一:
public class SingleTon {
private static SingleTon singleTon;
private SingleTon(){
}
public synchronized static SingleTon getSingleTon(){
if(singleTon == null){
singleTon = new SingleTon();
}
return singleTon;
}
}
方法二:
public class SingleTon {
private static SingleTon singleTon = new SingleTon();
private SingleTon(){
}
public synchronized static SingleTon getSingleTon(){
return singleTon;
}
}
请教一下这两种方法的区别是什么,哪个更好?
关于单例模式,其实一共有5种方式:
懒汉模式,对应你的第一种代码,优点是:延迟加载,缺点是:每次获取实例都需要进行锁同步,浪费资源。
饿汉模式,对应你的第二种代码,优点是:线程安全,缺点是:一上来就加载,浪费资源。
双重校验锁的懒汉模式。
静态内部类的懒汉模式。
Effective Java中推荐使用enum实现单例。