单例模式的概念

单例类只有一个实例,并且只由自己创建,实例化后向整个系统提供自己的实例。

单例设计模式主要分为2种:懒汉式和饿汉式。2者的区别在于初始化的时间不同。

像线程池,缓存,日志等都被设计成单例模式;spring中所有的bean不设置作用域的话,默认都是单例模式。

这些单例类大多都是具有管理资源的用途。

饿汉式单例模式的实现

饿汉式单例模式在定义类的时候被实例化。

public class Singleton1 {

private Singleton1() {}

private static final Singleton1 single = new Singleton1();

//静态工厂方法

public static Singleton1 getInstance() {

return single;

}

}

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;}
}

懒汉式的实现与之前的基本相同,只是实例化放在了方法内。

好处是消耗系统资源少。

坏处是它并不是同步的,如果在多线程下,可能被创建多个实例。因此在上面可以为方法加锁,保证同步。

转载于:https://www.cnblogs.com/xjx199403/p/10764281.html

java单例设计模式相关推荐

  1. java 单例设计模式 [

    为了保证类在内存中只能有一个对象,构造函数需要private外面不实例化对象,提供一个公共方法返回一个实例 //饿汉式 class Single{ //需要是static的,getInstance方法 ...

  2. java单例设计模式_Java设计模式之单例模式详解

    在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...

  3. java单例设计模式懒汉_Java设计模式之单例设计模式(懒汉、饿汉)

    [toc] Java设计模式之单例设计模式(懒汉.饿汉) 相信面试过的初中级Java开发的朋友可能都有遇到过单例设计模式的笔试题吧,如果之前没有背下来或者不理解,可以看看下面这篇文章,应该足够应付笔试 ...

  4. Java单例设计模式(实现Java的一个类只有一个对象)

    单例设计模式的定义:单例设计模式是一种软件设计模式,在它的核心包含一个称为单例类的核心类. 核心便是希望一个类只有一个对象.  如何实现类在内存中只有一个对象呢? 第一步:构造私有: 第二步:本身提供 ...

  5. Java|深入研究Java单例设计模式

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 简介 看到标题可能有人会问什么是单例模式呢? 在程序设计过程中 ...

  6. java单例设计模式之懒汉式和饿汉式

    单例模式 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法. 如果我们要让类在一个虚拟机中只能产生一个对象: 将类的 ...

  7. JAVA单例设计模式简单实现(懒汉与恶汉),多例设计模式的简单实现

    单例设计模式饿汉式 package Singleton; public class Singleton { private static final Singleton INSTANCE = new ...

  8. 探讨一下Java单例设计模式

    所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等. 1. ...

  9. java单例设计模式双重_Java 设计模式 ——单例模式(饿汉,懒汉,双重锁,静态内部类)...

    设计模式: 是在大量的实践中总结和理论化之后优选的代码结构,编程风格,以及解决问题的思考方式.设计模式免去我们自己再思考和摸索.就像是经典的棋谱,不同的棋局,我们用不同的棋谱 俗称"套路&q ...

最新文章

  1. 强弩之末,势不能穿鲁缟
  2. 【机器学习】分类算法-K-近邻算法
  3. Jquery屏蔽回车键
  4. 【Linux分享】Linux常用命令+教程分享
  5. ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘
  6. EXTJS 6 新特性(译文)
  7. Android 控件之 Date Time 组件
  8. JavaScript正则表达式 1
  9. 使用VC2005编译静态应用程序的方法
  10. html邮件签名制作,制作自己的个性化电子邮件签名
  11. CVPR2019/图像翻译:TransGaGa: Geometry-Aware Unsupervised Image-to-Image Translation几何感知的无监督图像到图像的翻译
  12. 贪吃蛇项目难还是2048难c语言,贪吃蛇大战2048好玩吗 贪吃蛇大战2048玩法简介
  13. X99主板2011-3接口E5 CPU一览表
  14. 记:css绘制小猪佩奇的项目及踩过的坑
  15. glew glfw opengl 之间的关系
  16. 石英晶振的特点及主要参数
  17. Suzy加油吧 Day 29 | 回溯算法进行中:491. 递增子序列,46 全排列,47 全排列2
  18. 最容易被人工智能取代的10种职业,今年换工作别入坑了!
  19. cocos2d-x 横板游戏触屏人物和背景移动 方法1
  20. 完善发现、培养、激励机制 全面增强科技人才活力|方格教育

热门文章

  1. 在.net中如何禁用或启用DropDownList的Items
  2. 关于对话框DoModal()函数调用失败的原因分析
  3. 使用nginx在Windows部署网站https服务
  4. OpenCV 透视变换
  5. 中望cad2018中文版
  6. 【Linux系统】Linux命令之文件管理
  7. PDF转换图片,图片的切割,图片转换PDF以及PDF加水印等记录贴
  8. django 使用Ajax方式POST JSON数据包
  9. 201521123078《Java程序设计》第2周学习总结
  10. 【BZOJ-13962865】识别子串字符串识别 后缀自动机/后缀树组 + 线段树