高效Java技巧之如何正确的实现单例
发布网友
发布时间:2022-05-18 20:53
我来回答
共2个回答
热心网友
时间:2023-11-02 13:05
/**
* 懒汉模式
* */
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton(){}
public static Singleton getInstance(){
if(uniqueInstance==null){ //首先判断是否已创建,如果未创建,才进入同步代码块
//这样可以减少同步代码块带来的内存开销
synchronized(Singleton.class){ //synchronized将该类锁住,使得其他线程无法访问
if(uniqueInstance==null){ //再次检查是否创建过实例
uniqueInstance=new Singleton();
}
}
}
return uniqueInstance;
}
}
/**
* 饿汉模式
* */
public class Singleton {
private static Singleton uniqueInstance=new Singleton() ;
private Singleton(){}
public static Singleton getInstance(){
return uniqueInstance;
}
}
热心网友
时间:2023-11-02 13:06
首先理解一下什么是静态类,静态类就是一个类里面都是静态方法和静态field,构造器被private修饰,因此不能被实例化。Math类就是一个静态类。
知道了什么是静态类后,来说一下他们两者之间的区别:
1)首先单例模式会提供给你一个全局唯一的对象,静态类只是提供给你很多静态方法,这些方法不用创建对象,通过类就可以直接调用;
2)单例模式的灵活性更高,方法可以被override,因为静态类都是静态方法,所以不能被override;
3)如果是一个非常重的对象,单例模式可以懒加载,静态类就无法做到;