设计模式之单例模式一(懒汉式)

单例模式:

只保证对象的一个实例,这样可以节约内存,防止对资源的多重占用,设置全局访问点,严格控制访问。但是由于没有接口,所以扩展起来相对麻烦。

下面是单例模式的一种实现方式(懒汉式):

设计模式之单例模式一(懒汉式)_第1张图片

设计模式之单例模式一(懒汉式)_第2张图片

设计模式之单例模式一(懒汉式)_第3张图片

上面这种单例模式的实现是存在问题的,上面是在多线程中,其实现是非线程安全的,采用多线程debug的方式,设置如上所示的断点,当线程一执行完判断lazySingleton对象是否为空后,认为干预执行线程二,也进行是否为空的判断,此时这两个判断都是成立的,这样会构建两个实例,与单例模式向背。

下面是采用同步方法实现的线程安全:

设计模式之单例模式一(懒汉式)_第4张图片

设计模式之单例模式一(懒汉式)_第5张图片

设计模式之单例模式一(懒汉式)_第6张图片

同样经过多线程debug人工干预程序的运行,此时不会出现创建两个对象的情况。此方式采用类的同步锁,非常耗费资源,性能不好。

你可能感兴趣的:(设计模式)