首页 > 代码库 > 设计模式之单例模式分析

设计模式之单例模式分析

单例模式分为两大类:懒汉式和饿汉式

其最主要的区别在于:

懒汉式:指全局的单例实例在第一次被使用时构建

饿汉式:指全局的单例实例在类装载时构建

日常我们使用的最多也是懒汉式,懒汉式是按需加载,能够做到资源的最大利用

懒汉式:

技术分享

虽然这样写没什么问题,但是如果是多线程时可能出现问题了,如果多个线程同时访问 都判断了instance是否为null可能会创建两个实例

这时想到用synchronized加锁

技术分享

 

这样的话如果两个线程同时访问的话就会有一个是在等待,可以避免出现创建两个实例的情况当然这还是会有效率问题就是每次只能一个线程访问,其他线程要等待

技术分享

这里做了两次判断,如果instance为null就锁定,否侧可以多个线程同时访问,可以有效的解决Single2中的效率问题

饿汉式:

技术分享

在类装载时构建,相对于懒汉式的问题来说这是一个很完美的但也有很多缺点 :初始化太早,资源浪费,如果本省依赖其他数据,难以保证其他数据在它初始化之前准备好。

单例就讲这么多,学的还是不够

 

设计模式之单例模式分析