1、饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。
2、从实现方式来讲他们最大的区别就是懒汉式是延时加载,他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,饿汉式无需关注多线程问题,写法简单明了,能用则用。真正用到的时候才去建这个单例对象,“饿汉式”是在不管用不用得上,一开始就建立这个单例对象。
举例:
一般的懒汉模式:
饿汉模式:
//饿汉模式
class Singleton1{
//保存该类对象的一个实例,饿汉式的做法即在声明的同时初始化该对象
private static Singleton1 test = new Singleton1();
//将构造函数私有化, 不对外提供构造函数
private Singleton1(){
}
//向外提供访问该类对象的方法
public static Singleton1 getInstance(){
return test;
}
}