Java 单例模式分 懒汉模式 和 饿汉模式
单例模式主要运用于频繁的调用不需要创建新的实例这种情况, 例如工具类,数据库操作类等。
单例模式需要将构造方法私有化,防止创建对象。
饿汉模式:
package tt;
public class Singleton {
private static Singleton sign = new Singleton();
private Singleton() {
}
public static Singleton getSign() {
return sign;
}
}
饿汉模式初始化就创建了对象, 每次调用都返回同一个对象。
饿汉模式是线程安全的。
懒汉模式:
package tt;
public class Singleton {
private static Singleton sign = null;
private Singleton() {
}
public static Singleton getSign() {
if(null==sign){
sign =new Singleton();
}
return sign;
}
}
与饿汉模式的区别是初始化不创建对象, 在使用的时候判断, 如果没有才创建。
这样在多线程的环境下会存在线程安全问题。 解决方法就是线程加锁
效率比较高的加锁方法:
package tt;
public class Singleton {
private static Singleton sign = null;
private Singleton() {
}
public static Singleton getSign() {
// 当前对象为null 的话才进入同步块
if (null == sign) {
synchronized (Singleton.class) {
if (null == sign) {
sign = new Singleton();
}
}
}
return sign;
}
}