设计模式:单例模式之双重检查
双重检查
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;}
}
设计模式:单例模式之双重检查相关推荐
- java并发编程(二十六)——单例模式的双重检查锁模式为什么必须加 volatile?
前言 本文我们从一个问题出发来进行探究关于volatile的应用. 问题:单例模式的双重检查锁模式为什么必须加 volatile? 什么是单例模式 单例模式指的是,保证一个类只有一个实例,并且提供一个 ...
- 单例模式,双重检查实现线程安全
//懒汉式,线程安全 public class Singleton5 {private static volatile Singleton5 singleton;private Singleton5( ...
- 单例模式之双重检查锁(double check locking)的发展历程
不安全的单例 没有注意过多线程安全问题的时候,我们的单例可能是这样的: public final class Singleton {private static Singleton instance; ...
- Java单例模式中双重检查锁的问题
单例创建模式是一个通用的编程习语.和多线程一起使用时,必需使用某种类型的同步.在努力创建更有效的代码时,Java 程序员们创建了双重检查锁定习语,将其和单例创建模式一起使用,从而限制同步代码量.然而, ...
- C++设计模式-单例模式(双重锁定)
目录 基本概念 代码与实例 基本概念 单例模式以前都出过一个了,再次只粗略讲下! 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 其中UML图如下(来自于大话设计模式) 代码与实例 下 ...
- Java常用设计模式————单例模式
单例模式简介 90%以上的设计模式都或多或少的应用了接口和抽象类,而单例比较特殊,并没有接口的应用. 单例Singleton指仅仅被实例化一次的类.通常被用来代表那些本质上唯一的系统组件.----&l ...
- 设计模式 -- 单例模式(Singleton)
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- 主要内容包括: 初始单例 ...
- Java设计模式——单例模式
单例模式 1.什么是单例模式. 2.单例设计的几种实现方式. 2.1.懒汉式 2.2.饿汉式 2.3.登记式 3.总结 4.建议 1.什么是单例模式. 确保某一个类只有一个实例,并且提供一个全局访问点 ...
- 一文理解设计模式--单例模式(Singleton)
单例模式(Singleton) Singleton模式确保每个Java类加载器只能有一个已有的实例并提供对其的全局访问,单例可以节省内存,加快对象访问速度 适用场景 需要频繁实例化然后销毁的对象 创建 ...
最新文章
- python实现http下载文件-Python实现http文件下载
- 成功解决利用pandas的read_csv函数读取csv文件的时候出现中文乱码问题
- C/C++函数调用约定
- CC254x--BLE
- springboot yml对于list列表配置方式
- Apache OpenOffice 漏洞使数千万用户易受代码执行攻击
- Android Handler异步通信:深入详解Handler机制源码
- OFFICE技术讲座:中文标点符号有哪些
- CAD软件查看.dwg、.dxf、.dwf、.jpeg、.jpg、.png、.gif等文件
- 复杂网络分析软件NetworkX和UCINET数据关联的方法
- java对比两张图片是否一致_Java实现图片对比功能
- 说一说我电脑上的那些必备软件
- 在线图片转文字怎么转?这两种方法简单又实用!
- 基于北洋PT站表结构分析以及ORM重写
- java 解析uri_Uri详解之——Uri结构与代码提取
- 使用photoshop以及markman进行快速重构页面的几个步骤
- RuoYi若依代码生成+一键部署
- console.log()用法
- 告别CMD.windows终端神器conemu设置
- 华为铁三角:什么是高层赞助人Sponsor制度