`
sunbin
  • 浏览: 342753 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

单例4种创建方式

 
阅读更多


1: 从一个类的内部构造单例基本条件
       私有的无参构造函数
       私有的静态变量,声明了当前对象的引用
       通过静态方法取得单例

2:从类的内部构造单例的4种方式
public class UserService {
  private static final UserService userService = new UserService();

private UserService() {

}
//采取预加载的方式,userService在 classLoader 载入UserService.class

public static UserService getInstance(){
return userService;
}

//用了synchronized 多个线程排队的情况比较严重

public static synchronized UserService getInstance(){
if(userService==null){
userService = new UserService();
}
return userService;
}


// 可能会创建多个实例的情况
public static UserService getInstance() {
if (userService == null) {
synchronized (UserService.class) {
userService = new UserService();
}
}
return userService;
}

//通过双检查来判断,当前实例是否为空,第一次创建实例的时候可能会出现排队情况
// 创建完实例后,以后不会有排队的情况

// public static UserService getInstance() {
// if (userService == null) {
//    synchronized (UserService.class) {
//      if (userService == null) {
//        userService = new UserService();
//       }
//     }
// }
//    return userService;
//
// }
//}
分享到:
评论

相关推荐

    Flask框架单例模式实现方法详解

    创建到单例模式4种方式: 1.文件导入 2. 类方式 3.基于__new__方式实现 4.基于metaclass方式实现 1.文件导入: in single.py class Singleton(): def __init__(self): pass site = Singleton

    一个单例模式的晋级过程(饿汉-懒汉-DCL-IoDH-枚举)

    一个单例模式的晋级过程(饿汉-懒汉-DCL-IoDH-枚举) 文章目录一个单例模式的晋级过程(饿汉-懒汉-DCL-IoDH-枚举)什么是单例?...这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一

    iOS 页面间几种传值方式(属性,代理,block,单例,通知) - iOS知识库1

    TRiNg属性,用o接收传过来的字符g,同时创建一e:BCLF用来显示传过的字符g在>OOTAiFw4ONTROLLFRSb引入5FTBiLAiFw4ONTRO

    GOF23之单例模式

    核心作用: 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 就是整个程序有且仅有一个实例。该类负责创建自己的对象,同时确保只有一个...常见的五种单例模式实现方式: 饿汉式(线程安全、调用效率高

    面试官的一道简单的单例模式问题给我问懵了,详解单例模式双重检查加锁为什么要加volatile关键字!

    面试官:说说单例模式几种写法? 我:懒汉式和饿汉式,懒汉式巴拉巴拉,饿汉式巴拉巴拉。 面试官:我们都知道synchronized加锁是比较耗费资源的,你这种写法每次访问都需要获得锁(基础的懒汉式写法),效率比较低,...

    33种JAVA设计模式DEMO

    这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式...

    HelloSpring.zip

    IOC容器获取bean的方式 * 通过id获取名字 * 通过类型获取,ioc中如果出现同类型两个对象,报错 4。bean的作用域 * 单例 scope=“singleton” * 原型 scope=“prototype” 5。bean的生命周期: 默认情况下IOC容器创建...

    吉林大学软件学院卓班设计模式第一次作业

    4. 显然,一套场所组合对应一个工厂,请实现将各工厂也单例化。 5. 一个线程对象可以是多种状态(运行,空闲,挂起等),创建线程是非常耗资源的。线程池可以较好地避免频繁创建线程:一个线程池可以聚合N个线程...

    day020-继承加强和设计模式代码和笔记.rar

    step4:在我们代码中通过创建对象或者类名的方式使用即可 3.2 使用自己的jar包 (造轮子) step1:选中自己想要封装成jar包的类,右键export导出 在输入框中输入 jar: 1. jar File : 普通...

    24种设计模式介绍与6大设计原则

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和...

    Python-高频-面试-知识点

    11.单例模式的几种实现方式的及优化? 3 12.作用域的类型有哪些? 5 13.深拷贝和浅拷贝的区别? 5 14.多线程和多进程的区别? 6 15.is是对比地址,==是对比值 6 16. read,readline和readlines 6 17.闭包 6 18.垃圾...

    初识Spring

    初学Spring笔记整理Spring简介Spring Bean 定义Spring Bean 作用域例子:(1)用无参构造方法创建对象(2)用带参的构造方法创建对象(3)用静态工厂创建对象(4)用非静态工厂创建对象Spring的单例模式和多例模式...

    Spring.html

    ClassPathXmlApplicationContext:使用这个工厂创建对象,他会根据scope智能判断是否懒加载,如果是单例则创建容器时就会创建里面bean的实例,如果是多例在获取使用时才会创建bean实例 ...

    Ruby设计模式(中文版+英文版).pdf

    本书以通俗易懂的方式介绍了Ruby设计模式,主要包括Ruby概述、使用模板方法变换算法、使用策略替换算法、通过观察器保持协调、通过迭代器遍历集合、使用命令模式完成任务、使用适配器填补空隙、使用装饰器改善对象、...

    design-patterns:23种模式GOF和10种模式Java EE蓝图

    2-工厂方法:专注于为创建相同层次结构的对象提供标准点3-抽象工厂:在模型中提供更大的灵活性,允许以动态方式交换实现工厂方法的类4-生成器:当我们必须创建一个包含许多对其他对象的引用的对象时使用,可以更...

    xmljava系统源码-SpringInAction4:《SpringInAction4th》学习笔记

    holder”创建单例模式的理解,参考 Spring中单例的概念限于Spring上下文中,遵守约定 内部bean适用于setter注入和构造器注入,内部bean不能被复用 SpEL表达式 3. 高级装配 4 种自动装配 byName, byType, contructor, ...

    Spring_1_IOC

    Spring_1_IOC, 1.简单的依赖注入。 2.对象的生命周期:单例/原型。 3.依赖注入的两种方式:设值注入/构造注入。 4.对象工厂的延迟创建。 5.自动装配:byName/byType。

    scala从入门到精通技术教学视频

    4,每一块知识点, 都有配套案例, 学习不再迷茫。 课程简介 第一章 环境搭建 00.导学 01.Scala简介 02.Scala程序和Java程序对比 03.Scala环境搭建 04.Scala解释器 05.案例_做最好的自己 第二章 变量和数据类型 00....

Global site tag (gtag.js) - Google Analytics