单例模式有以下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

一、懒汉式单例

//懒汉式单例类.在第一次调用的时候实例化自己
public class Singleton {  private Singleton() {}  private static Singleton single=null;  //静态工厂方法   public static Singleton getInstance() {  if (single == null) {    single = new Singleton();  }    return single;  }
}

  以上懒汉式单例的实现没有考虑线程安全问题,它是线程不安全的,并发环境下很可能出现多个Singleton实例,要实现线程安全,有以下三种方式,都是对getInstance这个方法改造,保证了懒汉式单例的线程安全。

1、在getInstance方法上加同步

public static synchronized Singleton getInstance() {  if (single == null) {    single = new Singleton();  }    return single;
}

2、双重检查锁定

public static Singleton getInstance() {  if (singleton == null) {    synchronized (Singleton.class) {    if (singleton == null) {    singleton = new Singleton();   }    }    }    return singleton;   }

3、静态内部类

public class Singleton {    private static class LazyHolder {    private static final Singleton INSTANCE = new Singleton();    }    private Singleton (){}    public static final Singleton getInstance() {    return LazyHolder.INSTANCE;    }
}

二、饿汉式单例

//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {  private Singleton1() {}  private static final Singleton1 single = new Singleton1();  //静态工厂方法   public static Singleton1 getInstance() {  return single;  }
}

  饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。

  

  

转载于:https://www.cnblogs.com/echo-ling/p/7510952.html

创建型设计模式(单例模式)相关推荐

  1. 设计模式----创建型设计模式(单例模式、工厂方法模式、构建者模式)

    创建型设计模式 单例模式(Singleton Pattern) 单例模式介绍 代码演示 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(线程安全,同步方法) 懒汉式(线程安全, ...

  2. Java设计模式之创建型:单例模式

    一.什么是单例模式: 单例模式可以确保系统中某个类只有一个实例,该类自行实例化并向整个系统提供这个实例的公共访问点,除了该公共访问点,不能通过其他途径访问该实例.单例模式的优点在于: 系统中只存在一个 ...

  3. 技术图文:02 创建型设计模式(下)

    创建型设计模式(下) 知识结构: 图1 知识结构 单例模式 – 确保对象的唯一性 Sunny 软件公司承接了一个服务器负载均衡软件的开发工作,该软件运行在一台负载均衡服务器上,可以将并发访问和数据流量 ...

  4. 创建型设计模式对比总结 设计模式(八)

    创建型模式是new 的一种替代方式,可以将对象的创建与具体的类型进行分离 目前已经介绍了5种创建型设计模式(如果简单工厂算一种的话,那就是6种) 分别是: 简单工厂模式.工厂方法模式.抽象工厂模式.建 ...

  5. java面向对象程序设计第三版_JAVA面向对象程序设计之创建型设计模式

    [本文详细介绍了JAVA面向对象程序设计中的创建型设计模式,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 1.1 什么是设计模式 设计模式( Design pattern )是一套被反复使用.多数 ...

  6. 从框架源码中学习创建型设计模式

    文章目录 从框架源码中解读创建型设计模式 工厂模式 案例一:RocketMQ源码-创建Producer生产者 案例二:RocketMQ源码-创建过滤器工厂 抽象工厂 案例一:Dubbo源码-创建缓存的 ...

  7. java设计模式之创建型设计模式

    创建型设计模式: 抽象工厂(Abstract Factory): 用途:提供一个接口以创建一系列相关或相互依赖的对象,而无需指定具体的类. 场景: 一个系统要独立于它的产品的创建. 一个系统要由多个产 ...

  8. JavaScript设计模式之创建型设计模式

    此系列总结与<JavaScript设计模式>,总共分为创建型设计模式.结构型设计模式.行为型设计模式.技巧型设计模式和架构性设计模式五大类. github原文地址:YOU-SHOULD-K ...

  9. JavaScript设计模式第一弹-创建型设计模式

    前言 接下来将会为大家介绍设计模式中的创建型设计模式,在此之前需要掌握一定的JavaScript对象继承基础. 简单工厂模式 先说说 什么是简单工厂模式:又叫静态工厂方法,由一个工厂对象决定创建某一种 ...

  10. 设计模式--创建型设计模式

    一. 设计模式的目的 ​ 编写软件过程中,可能面临来自耦合性.内聚性.可维护性.可扩展性.重用性.灵活性等多方面的挑战,设计模式是为了让程序具有更好的: 代码重用性(即相同的代码,不用多次编写) 可读 ...

最新文章

  1. 关于在DataTable中执行DataTable.Select(条件)返回DataTable的解决方法
  2. Hive 01_初学必知
  3. html页面判断是否登录,egg(103)--egg之定义公共的中间件判断用户是否登录以及去结算页面制作...
  4. 解读中国杰出CFO之道
  5. 什么是HDMIARC
  6. NVisionXR_iOS教程十一 —— 多场景切换
  7. 用计算机怎么管理小米路由器,如何为小米路由器设置局域网
  8. SSL2812 2017年10月30日提高组T2 凤凰院凶真(dp,LCIS)
  9. 安富莱C语言编码规范
  10. 笨鸟的平凡之路-KETTLE的安装
  11. 计算广告小窥[下]要啥自行车!
  12. 从我自己的角度总结一下移动互联网的技术
  13. 解决 VS 无法打开包括文件: “XXX.h”: No such file or directory问题
  14. C语言中字符串用strcmp和==比较的问题
  15. 苏嵌学习日志12 07.20
  16. 最短路径:Dijikstra算法/Floyd算法
  17. 通过简单的温湿度传感器进行简单的物联网设计(二)电路连接上
  18. GWAS - plink介绍与安装(Mac)
  19. 微软lumia固件服务器,微软Lumia 950 XL刷Win10 ARM项目已适配20H1更新
  20. React学习笔记一(React入门+JSX+脚手架)

热门文章

  1. python连接mysql中报错1064修改方法
  2. 前序,中序,后序遍历
  3. 搞定vim的窗口操作
  4. springMVC,mybatis配置事务
  5. XBOX ONE游戏开发之登陆服务器(一)
  6. [00028]-[2015-09-23]-[00]-[VC 关于Excel操作的测试]
  7. 获取json的节点名称
  8. android ui篇
  9. 力控报警转储 mysql_力控ODBC转储说明.pdf
  10. linux 自定义目录,linux – cron命令的自定义目录