单例模式的几种实现方式比较
来源:互联网 发布:树莓派安装rpm软件 编辑:程序博客网 时间:2024/05/29 03:44
首先上一个最简单的Demo
public class Singleton {private Singleton() {//创建单例的过程可能会比较慢System.out.println("Singleton is create");}private static Singleton instance = new Singleton();public static Singleton getInstance() {return instance;}public static void createString(){System.out.println("createString in Singleton");}}优点:简单可靠
缺点:单例变量没有使用懒加载。JVM加载此单例时,单例对象就会建立。调用createString的静态方法,不需要使用到单例变量,但是该变量还是初始化。
改进版懒加载单例Demo
public class LazySingleton {private LazySingleton(){//创建单例的过程可能会比较慢System.out.println("LazySingleton is create");}private static LazySingleton instance = null;public static synchronized LazySingleton getInstance() {if (instance == null)instance = new LazySingleton();return instance;}public static void createString(){System.out.println("createString in Singleton");}}优点:使用了懒加载的方式,确保系统启动时没有额外的负载。
缺点:获取单例的方法使用了同步的方式。时耗稍微比大于第一种单例模式。至于为什么一定要使同步?因为在多线程的情况下,线程1正在创建单例时,完成赋值前,线程2可能判断instance为空,故线程2也会new一个实例。而导致多个实例创建。
第三种单例模式(推荐)
public class StaticSingleton {private StaticSingleton(){System.out.println("StaticSingleton is create");}private static class SingletonHolder {private static StaticSingleton instance = new StaticSingleton();}public static StaticSingleton getInstance() {return SingletonHolder.instance;}public static void createString(){System.out.println("createString in Singleton");}}优点:使用内部类的方式实现单例,既可以做到延迟加载,也不必使用同步关键字。
0 0
- 单例模式的几种实现方式比较
- 单例模式的几种实现及其比较
- 单例模式几种实现方式
- 单例模式的几种实现方式的对比
- 单例模式singleton的几种实现方式
- 单例模式的几种实现方式
- 单例模式的几种实现方式
- C#单例模式的几种实现方式
- 单例模式的几种实现方式总结
- 常用设计模式-单例的几种实现方式
- 单例模式的几种实现方式
- 单例模式的几种实现方式
- Java单例模式的几种实现方式
- 单例模式的几种实现方式
- 单例模式的几种实现方式
- 单例模式实现的几种方式
- 单例模式的几种实现方式
- 单例模式的几种实现方式
- 原码、反码和补码
- wireshark抓包图解 TCP三次握手/四次挥手
- Eclipse下通过Maven的Jetty插件运行Web工程的配置,包括启动https
- MySQL执行计划解读
- codeforces733E LCA在线
- 单例模式的几种实现方式比较
- 实现Android5.0过渡动画兼容库
- Nov week1
- PMP学习笔记之第四章 项目整合管理
- STM32 USART寄存器方式编程
- ⑦基于时间型SQL盲注
- 【Codeforces 733F】 Drivers Dissatisfaction 【MST+bianry lifting】
- 关于Flux的学习
- jsp自定义标签