002-单例模式(懒汉式)

懒汉式单例是指在类加载的时候不创建单例实例,只有在第一次请求获取单例实例的时候创建。并且第一次创建后一直使用该实例,不再创建其它实例。


懒汉式单例设计模式在Java中很容易实现,简单的实现代码如下:

注意:懒汉式在使用时才创建实例,避免浪费内存,为了避免多线程问题必须加锁(synchronized)才能保证单例,但是会稍微影响效率。


上面这种把锁加在方法上,可以保证线程安全,是绝对的单例,还可以把锁加在代码块上,如下:

上面这种代码块锁加上双重检查的方法大部分情况下是线程安全的,但是如果发生指令重排序就会发生线程不安全的情况,

指令重排后

那么如何解决这个问题呢?加valotile关键字即可:


valotile作用:内存可见性、禁止指令重排序

这种方式不但可以实现线程安全的创建实例,而且又不会对性能造成太大的影响。

因为volatile可能会屏蔽掉虚拟机中的一些代码优化,所以建议没有特别需要不要使用valotile,要根据情况而定。



代码:https://gitee.com/blueses/design-pattern

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容