设计模式学习-1-单例模式
单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。 懒汉式,线程不安全 当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的 public class Singleton{ private static Singleton instance;//声明一个全局的Singleton 对象,并用private 修饰,只能通过下面的方法获取 private Singleton(){ //把构造方法声明为私有的, } /** * 外部只能通过这个方法调用 * */ public static Singleton getInstance(){ if(instance== null){ instance ==new Singleton(); } return instance; } } 这段代码简单的说明了单例模式的使用方式,而且使用了懒加载模式,但是却存在致命的问题。假如有2个线程在调用getInstance()方法, 第一个线程 执行完《1》处的时候CPU的时间片切换给了第二个线程,第二个线程顺利的执行完了getInstance 方法