标签:
1.什么是单例模式饿汉式单例模式,
其定义形式如下:
public class Demo { private static Demo demo = new Demo(); private Demo(){ } public static Demo getintance(){ return demo; } }在该模式下,在类被加载的时候实例就被创建。
懒汉式单例模式,
其定义形式如下:
public class Demo2 { private static Demo2 demo2 = null; private Demo2(){ } public static Demo2 getintance(){ if(demo2 == null){ demo2 = new Demo2(); } return demo2; } }懒汉式单例模式,顾名思义就是他很懒,只有在要获取实例的而没有创建的时候他才会创建一个实例。但是,懒汉式单例模式有一个缺点,就是在多线程环境下,比如有一个线程正好运行完if(demo2 == null)就被其他线程占得了cpu,这是另外一个线程获得了一个实例,这个时候刚才的那个线程继续执行,又获得了一个实例。这样就获得了两个实例。不符合单例模式的规则啦,而饿汉式单例模式就不存在这个问题。那么应该如何解决这个问题呢?
双检测锁机制的单例模式,
其定义形式如下:
package com.john; public class Demo3 { private static Demo3 demo3 = null; private Demo3(){ } public static Demo3 getinstance(){ if(demo3 == null){ synchronized(Demo3.class){ if(demo3 == null){ demo3 = new Demo3(); } } } return demo3; } }在这种方式下,这有第一次创建实例的时候才进入同步方法,以后的实例已经创建,将不会再次进入同步方法。
标签:
原文地址:http://blog.csdn.net/u011918771/article/details/43315317