1 饿汉式
一上来就创建
线程安全 但是不能延时加载容易造成内存浪费
public class ImageLoader{
private static ImageLoader instance = new ImageLoader;
private ImageLoader(){}
public static ImageLoader getInstance(){
return instance;
}
}
2 懒汉式
先定义一个变量
判断不为空再创建
线程安全 可以延时加载 如果不加synchronized关键字就不线程安全了
public class SingletonDemo2 {
//类初始化时,不初始化这个对象(延时加载,真正用的时候再创建)
private static SingletonDemo2 instance;
//构造器私有化
private SingletonDemo2(){}
//方法同步,调用效率低
public static synchronized SingletonDemo2 getInstance(){
if(instance==null){
instance=new SingletonDemo2();
}
return instance;
}
}
3静态内部类
跟饿汉模式有点类似,只是在类装载的时候,SingletonHolder并没有被主动使用,只有显式调用getInstance方法是,才会调用装载SingletoHolder类,从而实例化instance,既实现了线程安全,又避免了同步带来的性能影响。
public class SingletonDemo3 {
2
3 private static class SingletonClassInstance{
4 private static final SingletonDemo3 instance=new SingletonDemo3();
5 }
6
7 private SingletonDemo3(){}
8
9 public static SingletonDemo3 getInstance(){
10 return SingletonClassInstance.instance;
11 }
12
13 }
网友评论