单例模式
单例模式就是指,采取一定方法,在整个软件系统中,对某一个类只创建一个对象实例,并只提供一个公共方法来取得这个对象实例
饿汉式
1.构造器私有化----->防止在类外创建对象,确保只创建一个对象
2.在类中创建一个static对象,并用static方法来返回这个对象(因为如果不用static方法的话,在类的外面就要创建对象来调用这个方法,这不符合我们的"一个对象"原则,而又因为静态方法只能使用静态成员,所以这个唯一的实例对象也只能是static)
之所以叫饿汉式,是因为你不管用没用这个类的对象,他都先帮你创建出来了,饿汉就像一辈子没吃过饭一样,在这里就像一辈子没创建过对象一样,饿汉还没开饭就冲去吃饭,还没遇到需要对象的时候就帮你创建对象。
懒汉式
1.构造器私有化
2.创建一个static对象引用
3.建立一个static方法,这个方法将判断static对象引用是否为空,为空就判断这个类还没有创建对象,然后将创建一个新对象,并把地址赋给对象引用,然后返回对象引用
饿汉式VS懒汉式
1.饿汉式是类加载时就创建了对象,懒汉式是要使用的时候才创建对象
2.饿汉式不存在线程安全问题,懒汉式存在线程安全问题,比如当一个线程执行了懒汉式的static方法,判断出了static对象引用为空,然后开始创建对象,而还没等对象创建完成,地址还没来得及赋给static对象引用时,又有一个线程过来判断,那它也会判断出对象引用为空的结论,这样优惠开始创建一个对象,那就相当于建立了两个对象,这将破坏了单例模式,程序出现问题
3.饿汉式有可能会浪费资源,因为不一定会调用事先被创建好的对象,懒汉式则不会
ps:在javaSE标准类中,java.lang.RunTime就是经典的单例模式