public class Singleton {
/* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
private static Singleton instance = null;
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
/* 静态工程方法,创建实例 */
public static Singleton getInstance() {
if (instance == null) {
synchronized (instance) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
/* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */
public Object readResolve() {
return instance;
}
}
/**
饿汉式:先初始化对象,Single类一进内存就创建好了对象 推荐使用
*/
class Single{
private static Single single=new Single();
private Single(){}
public static Single getInstance(){
return single;
}
}
/**
懒汉式:对象是方法被调用时才初始化,即对象的延时加载,
Single类进内存,对象还为创建,只有调用了getInstance方法之后才初始化创建
*/
class Single{
private static Single single=null;
private Single(){}
public static Single getInstance(){
if(single ==null){
synchronized(Single.class){
if(single==null){
single=new Single();
}
}
}
return single;
}
}
Lambada表达式
本文深入探讨了单例模式的两种实现方式:饿汉式和懒汉式。通过具体代码示例,展示了如何确保一个类只有一个实例,并提供一个全局访问点。同时,文中还涉及了序列化时对象的一致性问题。
176万+

被折叠的 条评论
为什么被折叠?



