单列模式之饥汉模式、饱汉模式、双重锁模式
我们经常用到的Java模式当中,经常会用到也比较简单的模式就是单列模式了,当系统设计中只需要创建一个实例的对象时。就会选用单列模式。
饱汉模式
饱汉模式顾名思义就是已经饱了不着急了,在需要的时候才被创建使用,不会早早的创建,优点是不用的时候不占用内存,缺点是线程不安全的,因为当多个线程同时访问时就会实例化多个对象。所以有了双重锁对这个模式进行改进。
public class UserA {
public static UserA usera;
private UserA() {
}
public static UserA getUserA() {
usera = new UserA();
return usera;
}
}
饥汉模式
饥汉模式就是类加载的时候就已经创建了这个类的实例,使用的时候就只用调用这个类的实例就可以了,缺点是如果系统设计时涉及多数的单列的时候就会创建出多个实例,占用内存。优点是代码简单明了,也是线程安全的。
public class UserB {
private static UserB userb= new UserB();
private UserB() {
}
public static UserB getUserB() {
return userb;
}
}
双重锁模式
这个模式是对饱汉模式的升级,当多个线程访问时就会加锁再创建实例,就不会在创建多个实例。
public class UserC {
public static UserC userc;
private UserC() {
}
public static UserC getUserC() {
if(userc==null) {
synchronized (UserC.class) {
userc = new UserC();
}
}
return userc;
}
}