饿汉式
class Singleton {
//1,私有构造方法,其他类不能访问该构造方法了
private Singleton(){}
//2,创建本类对象
private static Singleton s = new Singleton();
//3,对外提供公共的访问方法
public static Singleton getInstance() { //获取实例
return s;
}
}
懒汉式
class Singleton {
//1,私有构造方法,其他类不能访问该构造方法了
private Singleton(){}
//2,声明一个引用
private static Singleton s ;
//3,对外提供公共的访问方法
public static Singleton getInstance() { //获取实例
if(s == null) {
//这边如果使用Thread.sleep模拟,线程1等待,线程2等待,那么就会出现线程安全问题
//注意该处不能写成 return new Singleton();否则每次返回的都是新的实例
s = new Singleton();
}
return s;
}
}
饿汉式和懒汉式的区别
1,饿汉式是空间换时间,懒汉式是时间换空间
2,在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象
使用final实现单例模式,
用final修饰变量这样就不能通过Singleton.s = null 之类的语句来修改,实现单例模式。
class Singleton {
//1,私有构造方法,其他类不能访问该构造方法了
private Singleton(){}
//2,声明一个引用
public static final Singleton s = new Singleton();
}
本文详细介绍了单例模式的两种实现方式:饿汉式与懒汉式,并对比了两者的优缺点。同时,还展示了如何利用final关键字确保单例模式的唯一性。
2017

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



