饿汉式:
- 构造方法私有化;
- private 封装static 修饰已经new好的实例化对象;
- static 修饰的内部类中getInstance 获取唯一对象;
package test;
class Singleton{
private static Singleton singleton=new Singleton();
public static Singleton getInstance() {
return singleton;
}
private Singleton() {}
}
public class Ssingleton {
public static void main(String[] args) {
Singleton singleton1=Singleton.getInstance();
Singleton singleton2=Singleton.getInstance();
System.out.println(singleton1 );
System.out.println(singleton2);
}
}
运行结果为:只有一个实例化对象产生。
test.Singleton@7852e922
test.Singleton@7852e922
懒汉式:区别就在于,getInstance方法中使用控制语句,因而只产生一个实例化对象。
package test;
class Singleton{
private static Singleton singleton ;
public static Singleton getInstance() {
if (singleton==null) {
singleton =new Singleton();
}
return singleton ;
}
private Singleton () {}
}
public class Ssingleton {
public static void main(String[] args) {
Singleton singleton1=Singleton .getInstance();
Singleton singleton2=Singleton.getInstance();
System.out.println(singleton1);
System.out.println(singleton2);
}
}
懒汉式会有线程安全问题,多线程并发的情况下,会产生多个实例化对象。解决办法:全局锁与内存屏障。
本文详细介绍了单例模式的两种实现方式:饿汉式和懒汉式,并对比了两者的不同之处。饿汉式通过静态初始化确保唯一实例的创建,而懒汉式则在getInstance方法中进行判断以达到按需实例化的目的,但后者存在线程安全问题。
2869

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



