饿汉式
饿汉式的特点:显而易见,即使从头到尾没用过这个单例,单例的对象还是会被创建,所以会浪费一定的资源。
public class SingletonDemo1 {
//程序初始化时就创建单例对象
private static SingletonDemo1 Instance = new SingletonDemo1();
//私有构造器,防止被重写
private void singletonDemo1(){}
public static SingletonDemo1 singletonInstance(){
return Instance;
}
}
懒汉式
懒汉式的特点:类初始化时,不初始化单例对象。只有在被第一次调用时会创建单例对象,因为在调用时有可能同时有多个线程同时进入创建单例对象的情况,所以在这里添加了线程锁,避免多次创建单例对象。
public class SingletonDemo2 {
//类初始化时,不初始化这个对象
private static SingletonDemo2 Instance = null;
//私有构造器,防止被重写
private void SingletonDemo2() {
}
public static SingletonDemo2 singletonInstance() {
if (Instance == null) {
//加入线程锁,防止多个线程同时进入创建多个对象
synchronized (SingletonDemo2.class) {
if (Instance == null) {
Instance = new SingletonDemo2();
}
}
}
return Instance;
}
}
单例模式总结
饿汉式:线程安全,效率高,不能延时加载,存在浪费资源的情况。
懒汉式:线程不安全,需要添加线程锁控制,效率高,可以延时加载。
以上。
如有不合理的地方或更好的建议,请不吝赐教,谢谢!