java singleton(单例设计模式)
单例设计模式的主要作用是:
1.控制资源的使用,我们对资源使用线程同步来实现并发访问。
2.节约资源,我们对一个类只进行一个实例化进行全局的资源访问,节约了内存。
3.作为通信媒介,也是数据共享,可以让两个或者多个互不相关的线程或进程之间进行通信。
-------------------------------------------------------------------------------------------------------------------
几个使用单例模式设计的应用场景
在社交网站上显示在线人数时,我们把在线人数的数据存储到数据库中,我们可以对在线人数这个对象进行new,当上线一个人时就从数据库提取在线人数数据,进行加1的操作,有人下线时,从数据库中提取在线人数数据,进行减1操作。但是这样有线程安全问题,如果在同一个时间有两个或者多个人上线或下线,我们此时进行在线人数数据的增减操作,会出现显示在线人数和我们实际在线人数不一致的问题,所以我们可以使用单例设计模式来很好的解决这个问题。让在线人数示例一个全局对象,所有人都共同使用同一个对象进行数据的访问。
我们在使用打印机的时候,如果一个进程或者线程都独立占用打印机,那么打印出来的结果可能是多台打印机执行打印任务的组合,我们可以使用案例设计模式对打印机任务设计一个单例模式的脱机服务Printer Spooler,所有的打印任务都通过Printer Spooler进行。
数据库连接池服务也是一个典型的单例设计模式,数据库连接池的作用是节省打开或者关闭数据库时的效率损耗,这种损耗是非常严重的。还可以屏蔽不同数据库之间的差异,降低系统对数据库的耦合度,方便对数据库进行管理等等。数据库连接池是重量级资源,一个应用中只需要一个就可以了,既节省资源又方便操作,非常适合采用单例设计模式。
windows操作系统中对任务管理器的操作也是单例设计模式,对管理器中的任务我们只能在同一时间进行单独的操作,我们再进行文件操作时,可能会有多个线程对文件进行操作,采用单例设计模式能完美解决这个问题,所有对文件的操作都通过同一个实例进行,这样就不会产生混乱。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
单例模式的特点
1.单例模式只有一个实例,且这个实例是自己创建的,构造方法私有化。
2.为其他类提供获得单例类的静态方法。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
单例模式实现方式
1.懒汉式
懒汉式单例模式的特点是获得类的对象时判断是否已经存在对象,若存在直接返回对象,若不存在,在创建对象并返回对象。其特点时加载时间快,但是运行时比较慢。
懒汉式实现代码:
public class Singleton {
private static Singleton instance=null;
public synchronized static Singleton getInstance() {
if(instance==null) {
instance=new Singleton();
}
return instance;
}
private Singleton() {
System.out.println("这是单例设计模式懒汉式");
}
}
懒汉式只有外部对象第一次请求实例才去创建。
饿汉式:饿汉式单例模式在类加载时就开始创建对象,其特点是加载时间长,但是运行速度快。
饿汉式代码:
public class HungerySingleton {
private static final HungerySingleton instance=new HungerySingleton();
private HungerySingleton() {
System.out.println("这是饿汉式单例模式");
}
public static HungerySingleton getInstance() {
return instance;
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------
我们注意到懒汉式单例模式使用了synchronized关键字,目的是为了在同一时间只能有一个线程对该方法进行访问,避免多个线程访问该方法产生多个实例。
而饿汉式在类加载时就完成了初始化,所以对外部的获取实例的接口方法没有使用synchronized关键字修饰。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
枚举类型单例设计模式
实现简单,线程安全,任何情况下都是一个单例,无偿提供序列化机制,绝对防止多次实例化,即使面对复杂的序列化或者反射攻击时。
实现代码:
public enum SingletonEnum {
himself;
private Connection con=null;
private SingletonEnum(){
con=new Connection();
}
public Connection getConnection(){
return con;
}
}
调用方法:SingletonEnum.himself.doingSomething();
java singleton(单例设计模式)的更多相关文章
- Java基础 static限定符的使用 以及【 static实现的 singleton(单例)设计模式】
static实现的 singleton(单例)设计模式 /** static实现的 singleton设计模式 , 使得一个类只能够创建一个static对象 */ 模板设计结构: package Co ...
- java的单例设计模式
java的单例设计模式包括:饿汉设计模式和懒汉设计模式: 步骤: 1.创建一个对象把他设置为私有的成员变量,保证唯一 2.私有构造方法,防止new一个对象. 3.定义一个公开的静态方法,返回第一步创建 ...
- Java 之单例设计模式
设计模式: 对问题行之有效的解决方式, 其实它是一种思想. 单例设计模式 解决的问题:就是可以保证一个类在内存中的对象唯一性. 即单个实例. 比如对于A 和 B 两个程序使用同一个配置信息对象时, A ...
- Java中如果把构造方法也私有化,如何创建对象?Java的单例设计模式——饿汉式和懒汉式区别
Java的单例模式——饿汉式 package com.swift; //Java单例设计模式——恶汉式 public class SinglePerson { private String name= ...
- 【设计模式】Java之单例设计模式
1.单例设计模式:一个类只能有一个对象 1.1 创建单例类的步骤: 1.将构造方法私有化 2.创建私有的静态成员变量 3.共有的静态成员方法,提供当前的唯一对象 1.1 创建单例的两种方式: 1.饿汉 ...
- 【Java】单例设计模式
文章目录 单例设计模式 什么是设计模式 单例设计模式 实现 饿汉式 懒汉式 饿汉式与懒汉式的区别 饿汉式 懒汉式 单例模式的应用场景 单例设计模式 什么是设计模式 设计模式是在大量的实践中总结和理论化 ...
- 【14】-java的单例设计模式详解
预加载模式 代码: public class Singleton { private volatile static Singleton singleton = new Singleton(); pr ...
- java之单例设计模式
什么是设计模式? 设计模式是在大量的实践中总结和理论化之后优选的代码结构.编程风格.以及解决问题的思考方式.设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和探索. 所谓单例 ...
- java基础——单例设计模式(懒汉式)
public class Test7 { // 主函数 public static void main(String[] args) { Test7.getInstance().function(9, ...
随机推荐
- 自定义 Word 默认的 Normal.dotm 模板、更改 Word 默认字体、更改 Word 默认样式(16)
1. 引言 以Office 2016为例. 有没有遇见这样的问题: 每次新建一个 Word 空白文档打开后字体默认是等线,段落默认是单倍行距,默认标题也不是自己想要的样式,等一系列问题.每次打开都要调 ...
- ubuntu 使用新添加的用户登录只有$解决方法
在ubuntu中,使用useradd新建的用户,默认使用的shell是dash,导致界面不美观,操作也不舒服. 情况如下: 只有美元符,不显示用户,很多乱码,且文件没有颜色. 解决方法,将该用户使用的 ...
- flask框架(四)——flask CBV视图类解析
CBV视图类的两种基本写法 #第一种写法class IndexView(views.View): methods = ['GET'] decorators = [auth, ] def dispatc ...
- AX导出excel设置格式
今天在AX2009里面写一个导出EXCEL,没有模版,这是第一次碰到,之后写完之后发现导出的数据格式不对. 到处取经之后得到一下结果: 定义一个 Com range; SysExcelCells ...
- 【C#】上机实验八
1. 设计一个窗体应用程序,模拟写字板应用程序的基本功能.具体功能要求如下: (1)“文件”菜单中有“新建”.“打开”.“保存”.“退出”子菜单. (2)“编辑”菜单中有“剪切”.“复制”.“粘贴”. ...
- tkinter学习笔记_04
8.勾选项 checkbutton import tkinter as tk root = tk.Tk() root.title("xxx") root.geometry('200 ...
- Online Hard Example Mining 理解
Definition: Online Hard Example Mining (OHEM) is a way to pick hard examples with reduced computatio ...
- 最简单 无返回值 无参数 sql server存储过程
CREATE proc Upadte_stateas update Table_1 set [state]=2 where id in (select id from Table_1 where st ...
- IdentityServer4使用OpenIdConnect实现单点登录
接上一篇:IdentityServer4实现OAuth2.0四种模式之授权码模式 前面写的四种OAuth2.0实现模式只涉及到IdentityServer4的OAuth2.0特性,并没有涉及到OenI ...
- CSS 各种形状
制作圆形: 要使用CSS来制作一个圆形,我们需要一个div,被给它设置一个ID <div id="circle"></div> 圆形在设置CSS时要设置宽 ...