单例模式

单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行建立这个实例的一种模式。安全

单例模式有 3 个特色:spa

  1. 单例类只有一个实例对象;
  2. 该单例对象必须由单例类自行建立;
  3. 单例类对外提供一个访问该单例的全局访问点。

饿汉式单例code

package single;

//饿汉式单例
public class hungry {
    //构造器私有化
    private hungry(){

    }

    //一启动类就直接加载
    //可能会形成内存浪费
    byte[] byte1=new byte[1024*1024];
    byte[] byte2=new byte[1024*1024];
    byte[] byte3=new byte[1024*1024];
    byte[] byte4=new byte[1024*1024];

    private final static hungry hun=new hungry();

    public static hungry getHun(){
        return hun;
    }
}

 

懒汉式单例对象

package single;

//懒汉式单例
public class LazyMan {

//    构造器私有化
    private LazyMan(){

    }

    private volatile static LazyMan lazyMan;

//  双重检测锁的懒汉式单例  DCL单例模式
    public  static LazyMan getInstance(){
//      提升效率,这一层if判断
        if (lazyMan==null){
            //        加锁
            synchronized (LazyMan.class){
                if(lazyMan==null){
                    lazyMan=new LazyMan();//不是原子性操做,不要在属性值上加volatile
                }
            }
        }

        return lazyMan;
    }
}

 

静态内部类单例blog

package single;

//静态内部类
public class Holder {
//    构造器私有
    private Holder(){

    }

//    调用静态内部类
    public static Holder getInstance(){
        return holder.HOLDER;
    }

//    静态内部类
    public static class holder{
        private final static Holder HOLDER=new Holder();
    }
}

 

这三种是不安全的单例模式,能够经过反射拿到类中的属性和方法内存

以后更新枚举单例模式get

相关文章
相关标签/搜索