标签:
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