java 线程安全的单例_线程安全的单例模式的几种实现
单例模式是常见的设计模式之一:目的是节省内存,限制了实例的个数;有利于java GC回收机制。
单例模式的三个好处:
1.控制资源的使用,通过线程同步来控制资源的并发访问
2.控制实例的产生个数,来达到节约资源的目的
3.作为通信媒介使用,在不建立连接的情况下,让两个不先关的进程和线程之间实现通信
单例模式分类: 饿汉模式(在类加载时便会创建对象);
懒汉模式(在外部第一次请求实例时才会创建实例);
登记式模式
单例模式特点:
1.单例类只有一个实例
2.单例类必须自己创建自己唯一的实例
3.单例类必须自己给其他类提供这一实例
1.懒汉模式:类加载时不会初始化,当外部第一次请求实例时才会创建实例;而且第一次创建后不在创建该实例;
特点是:运行时获取对象的速度比较慢,但加载的时候比较快,它在整个生命的应用周期只占用一部分资源
//单例模式-懒汉式单例
public classLazySingleton {//私有静态对象,加载时候不做初始化
private static LazySingleton jjy=null;//私有构造方法,避免外部创建实例
privateLazySingleton(){}/*** 静态工厂方法,返回此类的唯一实例.
* 当发现实例没有初始化的时候,才初始化.
*@returnLazySingleton*/
synchronized public staticLazySingleton getJjy(){if(jjy==null){
jjy=newLazySingleton();
}returnjjy;
}
}
2.饿汉模式:类加载时就会初始化,创建实例;
特点是:运行时获取对象速度比较快,但加载时速度比较慢,会一直占用资源 (程序打开加载比较慢,但运行速度快---从用户体验角度来说推荐饿汉)
//单例模式-饿汉式单例
public class EagerSingleton {
//私有静态对象,加载时候不做初始化
private static EagerSingleton jjy=new EagerSingleton();
// 私有构造方法,避免外部创建实例
private EagerSingleton(){}
/**
* 静态工厂方法,返回此类的唯一实例.
*
*
*/
synchronized public static EagerSingleton getJjy(){
return jjy;
}
}
使用场景:数据库连接池;网站计数器;
java 线程安全的单例_线程安全的单例模式的几种实现相关推荐
- python线程安全的单例_[python笔记] 单例的几种实现方式(线程安全)
单例实现方式: 1.单例装饰器; 2.使用类: 3.使用元类 1.单例装饰器(非线程安全) 通过装饰器使一个类变成单例类,但是并非线程安全的,多线程状态下,每个线程创建不同的实例,因为没有加线程锁,所 ...
- java双重检查锁单例真的线程安全吗?
相信大多数同学在面试当中都遇到过手写单例模式的题目,那么如何写一个完美的单例是面试者需要深究的问题,因为一个严谨的单例模式说不定就直接决定了面试结果,今天我们就要来讲讲看似线程安全的双重检查锁单例模 ...
- java枚举来实现单例_枚举实现单例模式
Java中的枚举和其它语言不同,它是一个对象.早期的 Java 是没有枚举类型的大家都用类似于单例的方式来实现枚举,简单的说就是让构造 private 化,在 static 块中产生多个 final ...
- python线程安全的单例_详解python实现线程安全的单例模式
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- java singleton 多线程_Java创建线程安全的单例singleton
Java创建线程安全的单例 单例的使用场景 JVM中仅需要一个实例,因此能节省内存,加快访问速度,比如数据库连接池,计数器等.Spring 中的Bean,默认也是单例的,共享资源的访问,比如日志文件, ...
- 面试官:不使用synchronized和lock,如何实现一个线程安全的单例?
单例,大家肯定都不陌生,这是Java中很重要的一个设计模式.稍微了解一点单例的朋友也都知道实现单例是要考虑并发问题的,一般情况下,我们都会使用synchronized来保证线程安全. 那么,如果有这样 ...
- 面试官真是搞笑!让实现线程安全的单例,又不让使用synchronized!
单例模式,是Java中比较常见的一个设计模式,也是我在面试时经常会问到的一个问题. 经过我的初步统计,基本上有60%左右的人可以说出2-4种单例的实现方式,有40%左右的人可以说出5-6种单例的实现方 ...
- java 内部类 单例_确保对象的唯一性——单例模式 (四):一种更好的单例实现方法(静态内部类)...
3.5 一种更好的单例实现方法 饿汉式单例类不能实现延迟加载,不管将来用不用始终占据内存:懒汉式单例类线程安全控制烦琐,而且性能受影响.可见,无论是饿汉式单例还是懒汉式单例都存在这样那样的问题,有没有 ...
- java中的单例_细说Java中的几种单例模式
在Java中,单例模式分为很多种,本人所了解的单例模式有以下几种,如有不全还请大家留言指点: 饿汉式 懒汉式/Double check(双重检索) 静态内部类 枚举单例 一.饿汉式 image 饿汉式 ...
最新文章
- android免root兼容所有版本ui调试工具
- vs code python_用VScode配置Python开发环境
- RabbitMQ(二):Work Queues、循环分发、消息确认、持久化、公平分发
- HDU - 5176 The Experience of Love(并查集)
- 小程序制作回到顶部按钮
- 计算机跨专业专插本学音乐,欢迎投稿丨专插本可以跨专业考,只要肯坚持!
- ArrayList(Map(k v))相关操作和遍历
- 虚拟函数-1、静态联编与动态联编,引入虚函数
- Mac常用测试工具环境变量配置
- C语言物流管理运输系统
- 关于2023计算机408考研
- JavaScript模式(1):字面量和构造函数
- 学一点Wi-Fi:Roaming
- 英特尔芯片组系列 服务器,Intel 7系列芯片组正式发布 不同型号解析
- 使用tkinter实现 loading 等待效果
- java鼠标左键点击四溅,重生之我是一只鼠
- 中国市场 Android App 兼容性报告
- OpenWrt一些小问题的解决方法
- Filter的过滤器链
- 国际金融——我国服务贸易逆差的成因及对策研究
热门文章
- Java中的定制国际化(i18n)
- python无法安装pycurl_Python安装pycurl失败的解决方法
- HH SaaS电商系统的仓储系统设计
- nginx fastcgi python_Nginx + webpy 和FastCGI搭建webpy环境
- Web和HTTP基本术语和概念
- oracle utl inaddr,oracle11g之ACL拙见
- 同时防服务器维修,加强服务器日常运维,避免宕机灾难发生
- 为什么学习C语言这么久,看的懂代码,做不出题,写不出来项目?
- 字符斜杠是合法常量吗_【面试秘籍】你对String的intern方法了解吗
- java map 如何根据key获得对象_ThreadLocal:Java中的影分身