应用场景:
比如工具类,线程池,缓存,日志对象,配置文件。这些对象只需要一个就足够了,避免如果创造多个实例,引发其他问题(占用过多资源,不一致的结果等等)。
作用:
保证整个应用程序中某个实例有且只有一个。
类型1:饿汉式
实现步骤
/**
* 单例模式之-----饿汉模式
* @author Administrator
*
*/
public class Singleton {
private Singleton() {
};
private static Singleton init = new Singleton();
public static Singleton getInit() {
return init;
}
public static void main(String[] args) {
Singleton s1 = Singleton.getInit();
Singleton s2 = Singleton.getInit();
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
}
}
类型2:懒汉式
实现步骤
/**
* 单例模式之----懒汉模式
*
* @author Administrator
*
*/
public class Singleton2 {
private Singleton2() {
}
private static Singleton2 init;
public static Singleton2 getInit() {
if (init==null) {
init =new Singleton2();
}
return init;
}
public static Singleton2 getInit() {
if (init==null) {
Synchronized(Singleton2.class){
if (init==null) {
init =new Singleton2();
}
}
}
return init;
}
public static void main(String[] args) {
Singleton2 s3 = Singleton2.getInit();
Singleton2 s4 = Singleton2.getInit();
System.out.println(s3.hashCode());
System.out.println(s4.hashCode());
}
}
懒汉与饿汉的区别:
饿汉模式:加载类时比较慢,运行时获取对象的速度比较快,线程安全
懒汉模式:加载类时比较快,运行时获取对象的速度比较慢,线程不安全