双重检查

double-check概念是多线程开发中常使用的,如下代码所示,我们进行了两次if(null == instance)检查,这样就可以保证线程安全了。

实例化代码只用执行一次,后面再次访问时,判断if(null == instance),直接return实例化对象,也避免了反复进行方法同步。

public class SingletonTest06 {public static void main(String[] args){//Singleton1 s1 = Singleton1.getSingleton1();//Singleton1 s2 = Singleton1.getSingleton1();// s1, s2是同一个实例//System.out.println(s1 == s2);//System.out.println(s1.hashCode()+"  "+s2.hashCode());T t1 = new T();new Thread(t1).start();T t2 = new T();new Thread(t2).start();System.out.println(t1.s1 == t2.s1);}
}class T implements Runnable{public Singleton1 s1 = null;@Overridepublic void run() {try {Thread.sleep(10000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}Singleton1 s1 = Singleton1.getSingleton1();System.out.println(s1.hashCode());}
}// 懒汉式(线程安全, 同步方法)
class Singleton1{// 构造器私有化,外部不能newprivate Singleton1(){}private static volatile Singleton1 instance;// 向外部暴露一个静态的公共方法,加入双重检查代码,解决线程安全问题,同时解决懒加载问题// 同时保证了效率, 推荐使用// 双重检测public static  Singleton1 getSingleton1(){if(null == instance){synchronized(Singleton1.class){if(null == instance){instance = new Singleton1();}}}return instance;}
}

设计模式:单例模式之双重检查相关推荐

  1. java并发编程(二十六)——单例模式的双重检查锁模式为什么必须加 volatile?

    前言 本文我们从一个问题出发来进行探究关于volatile的应用. 问题:单例模式的双重检查锁模式为什么必须加 volatile? 什么是单例模式 单例模式指的是,保证一个类只有一个实例,并且提供一个 ...

  2. 单例模式,双重检查实现线程安全

    //懒汉式,线程安全 public class Singleton5 {private static volatile Singleton5 singleton;private Singleton5( ...

  3. 单例模式之双重检查锁(double check locking)的发展历程

    不安全的单例 没有注意过多线程安全问题的时候,我们的单例可能是这样的: public final class Singleton {private static Singleton instance; ...

  4. Java单例模式中双重检查锁的问题

    单例创建模式是一个通用的编程习语.和多线程一起使用时,必需使用某种类型的同步.在努力创建更有效的代码时,Java 程序员们创建了双重检查锁定习语,将其和单例创建模式一起使用,从而限制同步代码量.然而, ...

  5. C++设计模式-单例模式(双重锁定)

    目录 基本概念 代码与实例 基本概念 单例模式以前都出过一个了,再次只粗略讲下! 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 其中UML图如下(来自于大话设计模式) 代码与实例 下 ...

  6. Java常用设计模式————单例模式

    单例模式简介 90%以上的设计模式都或多或少的应用了接口和抽象类,而单例比较特殊,并没有接口的应用. 单例Singleton指仅仅被实例化一次的类.通常被用来代表那些本质上唯一的系统组件.----&l ...

  7. 设计模式 -- 单例模式(Singleton)

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- 主要内容包括: 初始单例 ...

  8. Java设计模式——单例模式

    单例模式 1.什么是单例模式. 2.单例设计的几种实现方式. 2.1.懒汉式 2.2.饿汉式 2.3.登记式 3.总结 4.建议 1.什么是单例模式. 确保某一个类只有一个实例,并且提供一个全局访问点 ...

  9. 一文理解设计模式--单例模式(Singleton)

    单例模式(Singleton) Singleton模式确保每个Java类加载器只能有一个已有的实例并提供对其的全局访问,单例可以节省内存,加快对象访问速度 适用场景 需要频繁实例化然后销毁的对象 创建 ...

最新文章

  1. python实现http下载文件-Python实现http文件下载
  2. 成功解决利用pandas的read_csv函数读取csv文件的时候出现中文乱码问题
  3. C/C++函数调用约定
  4. CC254x--BLE
  5. springboot yml对于list列表配置方式
  6. Apache OpenOffice 漏洞使数千万用户易受代码执行攻击
  7. Android Handler异步通信:深入详解Handler机制源码
  8. OFFICE技术讲座:中文标点符号有哪些
  9. CAD软件查看.dwg、.dxf、.dwf、.jpeg、.jpg、.png、.gif等文件
  10. 复杂网络分析软件NetworkX和UCINET数据关联的方法
  11. java对比两张图片是否一致_Java实现图片对比功能
  12. 说一说我电脑上的那些必备软件
  13. 在线图片转文字怎么转?这两种方法简单又实用!
  14. 基于北洋PT站表结构分析以及ORM重写
  15. java 解析uri_Uri详解之——Uri结构与代码提取
  16. 使用photoshop以及markman进行快速重构页面的几个步骤
  17. RuoYi若依代码生成+一键部署
  18. console.log()用法
  19. 告别CMD.windows终端神器conemu设置
  20. 华为铁三角:什么是高层赞助人Sponsor制度

热门文章

  1. 2018-2019-1 20165236 《信息安全系统设计基础》第4周学习总结
  2. Eclipse导入Spring Boot项目后pom.xml出现红叉的解决办法
  3. Centos之压缩和解压缩命令
  4. HTTPS_SSL配置的步骤以及原理说明
  5. ubuntu 串口转usb使用
  6. Adapter模式的好处
  7. 【动态规划】最长公共上升子序列
  8. 需求分析--12章 过程建模
  9. MySQL中优化sql语句查询常用的30种方法
  10. 多线程消息监听容器配置[ 消费者spring-kafka配置文件]