饿汉式:
- 构造方法私有化;
- 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);
}
}
懒汉式会有线程安全问题,多线程并发的情况下,会产生多个实例化对象。解决办法:全局锁与内存屏障。