设计模式之单例模式

来源:互联网 发布:论坛源码下载 编辑:程序博客网 时间:2024/06/02 01:22

单例的作用是保证整个application的生命周期中,在任意一个时刻只存在一个,分为两种模式:
1.饿汉模式 在类加载的时候对象就已经存在

public class Singleton {    private static Singleton singleton = new Singleton();    public Singleton(){}    public Singleton getINstance(){        return singleton;    }}

2.懒汉模式 类加载的时候对象还不存在,所谓的延迟加载,模式

public class Singleton {    private Singleton singleton = null;    public Singleton(){}    public Singleton getINstance(){        if(singleton==null){            singleton = new Singleton();        }        return singleton;    }}

ok 到这了说一个问题,单看上面两个单例的实现模式,饿汉模式是一种线程安全的模式,因为在类的创建过程中已经创建了一个静态的instance供使用,而懒汉模式则反之,再多线程环境下会遇到线程同步的问题,所谓线程同步就是因为现代计算机的发展,cpu速度要远远快于主存,所以在每个cpu都会带一个高速缓存,每个线程在修改数据的时候首先会将数据从主存读到高速缓存,修改完了之后再写回主存,这个过程中会存在数据不同步的问题,这地方就会有一个数据同步的修饰符volatile ,主要是将线程操作完成之后数据立刻写回主存,当然还有就是原子性操作的问题,除long 和double以外的的基本类型的赋值都是原子性操作,+1 不是原子性操作,说的有点多其实是要说单例的双重检查锁的问题了,ok代码

public class Singleton {    private volatile Singleton instance = null;    public Singleton() {    }    public Singleton getInstance(){        if(instance==null){            synchronized (Singleton.class) {                if(instance==null){                    instance = new Singleton();                }            }        }        return instance;    }}
原创粉丝点击