java单例模式使用及注意事项
1. 说明
1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例
2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstance时才会实例化对象)(java中饿单例模式性能优于懒单例模式,c++中一般使用懒单例模式)
3)单例模式要素:
a)私有构造方法
b)私有静态引用指向自己实例
c)以自己实例为返回值的公有静态方法
2.实例
饿单例模式:
package com.wish.modedesign;
public class HungrySingleton {
private static HungrySingleton instance = new HungrySingleton();
private HungrySingleton(){
}
public static HungrySingleton getInstance(){
return instance;
}
}
懒单例模式:
package com.wish.modedesign;
public class Singleton {
private Singleton(){
}
private static Singleton instance;
public static synchronized Singleton getInstance(){ //多线程时注意线程安全
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
测试类Driver.java
package com.wish.modedesign;
public class Driver {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1==s2); //true
}
}
3.优点和适用场景
1)单例模式的优点:
在内存中只有一个对象,节省内存空间。
避免频繁的创建销毁对象,可以提高性能。
避免对共享资源的多重占用。
可以全局访问。
2)适用场景:
需要频繁实例化然后销毁的对象。
创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
有状态的工具类对象。
频繁访问数据库或文件的对象。
4.使用时注意事项
1)使用时不能用反射模式创建单例,否则会实例化一个新的对象
2)使用懒单例模式时注意线程安全问题
3)饿单例模式和懒单例模式构造方法都是私有的,因而是不能被继承的,有些单例模式可以被继承(如登记式模式)
转载于:https://www.cnblogs.com/gaopeng527/p/5290759.html
java单例模式使用及注意事项相关推荐
- java 单例方法,java单例模式使用及注意事项
1. 说明 1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例 2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstan ...
- Java单例模式个人总结(实例变量和类变量)
Java单例模式 背景知识:Static关键字. 在对于定义类的变量,分为两种,是否具有static修饰的变量: 没有static修饰的变量,通过类的实例化(对象)引用,改变量称为实例变量: 使用st ...
- java异常及日志注意事项
java异常及日志注意事项 参考文章: (1)java异常及日志注意事项 (2)https://www.cnblogs.com/lq147760524/p/8475531.html 备忘一下.
- 关于 调用 JNI JAR java 的说明和注意事项,调用第 靠写不下了
关于 调用 JNI JAR java 的说明和注意事项,调用第 靠写不下了
- Java 单例模式探讨
以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...
- Java单例模式优化写法
转载自 http://blog.csdn.net/diweikang/article/details/51354982 Java单例模式优化写法 方法一:推荐 [java] view plain co ...
- 写java代码时的注意事项_从方法返回Java 8的可选项时的注意事项
写java代码时的注意事项 Java 8引入的Optional类一直是该语言版本引入的最具争议的功能之一. 尽管我喜欢这个新的Java类的东西比不喜欢的东西多,但在Java方法中将其用作return类 ...
- Java单例模式的几种实现方式
Java单例模式的几种实现方式 在Java 中,单例类只能有一个实例,必须创建自己的唯一实例,单例类必须给所有其他对象提供这一实例.Java 单例模式有很多种实现方式,在这里给大家介绍单例模式其中的几 ...
- java 上传文件注意事项
java 上传文件注意事项 1.文件名有特殊字符的情况,所以最好是文件名前台url编码,后台再url解码,这点在下载的时候也一样 2.文件大小一定要设置,spring boot 有默认. 3.文件名校 ...
最新文章
- java 远程登陆windows_使用Windows身份验证,JAVA连接到远程MSSQL
- 公开课-C++学习路线实战导引:从0开始到操作系统内核开发
- springmvc 自定义view支持json和jsonp格式数据返回
- 项目中引入composer包
- 1282B1. K for the Price of One (Easy Version)
- 上海1.3万座玻璃幕墙建筑“一网统管”
- java string能存储多长_String 有多长?
- 证券投资深度学习_安信证券:“深度学习”开启新一轮计算模式变革
- 商汤押注AI教育,成立“商汤教育”子品牌
- URAL 1992 CVS 可持久化链栈
- (centos6.5)MySQL服务安装
- SonarLint 默认扫描规则
- android 左移动画_android 动画Animation之TranslateAnimation移动
- python复制excel图片_python批量导出excel区域图片
- Simon Knowles:30年做成三家独角兽公司,AI芯片创业的底层逻辑
- python求周长_计算任何三角形的周长[python 3]
- 无语的index hint:手工分配哈希区,5小时不出结果,优化后20分钟
- fMRI数据分析处理原理及方法fMRI数据分析处理原理及方法
- 数据结构实践(有的数据结构课后习题答案),红色是答案
- 【开餐馆】 动态规划
热门文章
- 基于DeepLabV3+与U-Net融合的黄瓜叶片病害严重程度分类方法
- 一种大豆多种病害自动识别的新方法
- 基于图像处理技术的柑橘病害自动检测与分类
- 【java】变量的应用
- pythonmysqlconnector_python操作mysql——mysql.connector
- pil python 安装_Python实现识别人脸特征并打印出来!
- 中文命名实体识别,HMM,CRF,BiLSTM,BiLSTM+CRF的具体实现
- 【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类...
- 数据挖掘-文本特征提取方法研究
- poj 1191 棋盘分割(记忆化dp+递归)