One: Java单例设计模式
今天就先说Java单列设计模式 ,这一块内容呢,主要是位于学习到JVM虚拟机底层方面的。以下是虚拟机
在虚拟机中,bean一共有两个常见的作用域。一种就是单列的 singleton,另一种就是prototype 原型。虽然这里叫做原型。但是要注意:在作用域里,创建出来的bean默认是单例的!!
那么单例和原型的却别是什么呢?也就是说在Spring里的核心容器中,如果是单列,容器就只会创建一个实例。如果是多例就顾名思义了,容器可以创建多个实例,
而实例又是什么呢 实例就是指:我引用了这个类的对象,这个对象就是实例。
单例就是我引用了多次这个对象,不管引用多少次,都是这个对象,在控制台打印出来的都是一样的地址符,这就是单例。
而多例就是我引用了很多次这个类的对象,每次引用的都是重新创建的新的对象,它们的地址符都不一样。都不是同一个对象。这就是多例。多个对象。
单例设计模式呢,开发套路中的一种套路。要做到就是保证只有一个实例。 做法如下:
1、先开发一个类,保证它是单独的类,只能创建出一个实例。
2、私有化构造方法:创建无参构造方法,将他的访问修饰符设置为private,私有的。
3、定义一个静态属性,提供静态方法,返回值为唯一的实例。
4、多次调试静态方法获取这个实例,保证得到的都是同一个。
其中有两种单例分为饿汉式和懒汉式。
饿汉式单例,饿汉式单例就是比喻成一个非常饥饿的人,这个类加载(就是加载一个厨房),
这个饿汉创建出来之后,不管厨房是谁的,先去给自己做了吃的(创建实例)。也不会管我们是否调方法。他就抢先一步的自己创建了实例。
而懒汉式则很懒,就算你的类开始加载,他也不会动弹。直到你调用了这个方法,他才开始创建,开始工作。
这两个单例比起来,饿汉式相对线程比较安全,懒汉式单例是线程不安全的。。
所以我们在用懒汉式时,需要加入同步锁。同步锁是加在方法上的,锁住了整个方法,性能比较低。而我们可以用双重同步锁,锁住少量的代码块。提高性能。一样是单例的。 ——ccc