java实现单例的5种方法,快收藏
1、饿汉式
饿汉式就是类加载后就创建好了单例,直接拿就行,但该方法容易产生垃圾
public class Singleton1 {//构造器私有化 防止外部实例private Singleton1() {}private static final Singleton1 SINGLETON_1 = new Singleton1();public static Singleton1 getInstance(){return SINGLETON_1;}
}
2、懒汉式,线程不安全
懒汉式就是,只有我使用的时候才去创建对象,但多线程条件下可能会破坏单例
public class Singleton2 {//构造器私有化 防止外部实例private Singleton2(){}private static Singleton2 SINGLETON_2;public static Singleton2 getInstance(){if (SINGLETON_2 == null){SINGLETON_2 = new Singleton2();}return SINGLETON_2;}
}
3、线程安全的懒汉式
使用volatile防止了指令重排,不加可能会产生半初始化对象(加载了但没有执行构造函数)
使用synchronized时对象为null时使线程同步防止创建多个对象
public class Singleton3 {private Singleton3(){}private static volatile Singleton3 SINGLETON_3;public static Singleton3 getInstance(){if (SINGLETON_3 == null){synchronized(Singleton3.class){SINGLETON_3 = new Singleton3();}}return SINGLETON_3;}
}
4、使用静态内部类实现懒汉式单例
使用静态内部类去创建单例,因为静态内部类只会实例化一次,所以第一次实例化以后,每次拿到的都是同一个对象,都是那个静态常量
public class Singleton5 {private Singleton5(){}private static Singleton5 singleton5;public static Singleton5 getInstance(){return SingletonHander.singleton;}private static class SingletonHander{private static final Singleton5 singleton = new Singleton5();}
}
5、使用枚举实现懒汉式单例
《Effective Java》
这种方法在功能上与公有域方法相近,但是它更加简洁,无偿提供了序列化机制,绝对防止多次实例化,即使是在面对复杂序列化或者反射攻击的时候。虽然这种方法还没有广泛采用,但是单元素的枚举类型已经成为实现 Singleton的最佳方法。—-《Effective Java 中文版 第二版》
public class Singleton4 implements Serializable {@Serialprivate static final long serialVersionUID = -2675976638179016828L;//构造器私有化private Singleton4(){}private static Singleton4 SINGLETON4;//调用该方法就会执行SingletonHander.instance.singleton4;执行这个方法就会//加载内部枚举,加载内部枚举类然后会创建一个枚举项,一个枚举项就是一个枚举的实例//所以在创建一个枚举项时会调用内部枚举的构造方法,从而创建一个单例public static Singleton4 getInstance(){return SingletonHander.instance.singleton4;}private enum SingletonHander{instance;//枚举项,每个枚举项只会创建一个private final Singleton4 singleton4;SingletonHander() {singleton4 = new Singleton4();}}
}
java实现单例的5种方法,快收藏相关推荐
- Java实现单例的5种方式
转自:https://blog.csdn.net/u014672511/article/details/79774847 1. 什么是单例模式 单例模式指的是在应用整个生命周期内只能存在一个实例.单例 ...
- java使用单例与使用static方法的对于和个人理解
1最近在重构项目中的老模块,打算引入spring boot对原有项目自己封装的依赖注入模块进行替换.项目中存在大量的工具类,大都是使用static方法编写的,比如时间工具类用于格式化日期,编码工具类用 ...
- Java实现单例的几种方式
1. 什么是单例模式 单例模式指的是在应用整个生命周期内只能存在一个实例.单例模式是一种被广泛使用的设计模式.他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省内存. 2. 单例模 ...
- java 内部类 单例_确保对象的唯一性——单例模式 (四):一种更好的单例实现方法(静态内部类)...
3.5 一种更好的单例实现方法 饿汉式单例类不能实现延迟加载,不管将来用不用始终占据内存:懒汉式单例类线程安全控制烦琐,而且性能受影响.可见,无论是饿汉式单例还是懒汉式单例都存在这样那样的问题,有没有 ...
- java单例的几种实现方法
java单例的几种实现方法: 方式1: public class Something { private Something() {}private static class LazyHolder { ...
- java test20006_Java单例7种测试实践
单例:一个进程中只能存在唯一一个对象. 1.饿汉模式. 主动型太粗暴./** * @author :jiaolian * @date :Created in 2021-01-10 21:25 * @d ...
- filter java 是单例的吗_JAVA 设计模式之 单例模式详解
单例模式:(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点.单例模式是创建型模式.单例模式在现实生活中应用也非常广泛. 在 J2EE 标准中,S ...
- 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)
单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...
- 回字有四种写法,那你知道单例有五种写法吗
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 转自 ...
最新文章
- [转]面向GPU的多LOD因子的大规模场景可视化策略
- mybatis在控制台打印sql语句
- How to mannuly configure vmtools in VM-Ware?
- SmartUpload文件上传组件的使用教程
- 终于有了属于自己的家,哈哈,很高兴~~
- SPEL + 中的错误处理
- linux编程两个子进程,Linux中fork同时创建多个子进程的方法
- Java Process getOutputStream()方法与示例
- 23个Python爬虫开源项目代码Python爬虫开源项目代码
- CPU 缓存一致性协议 MESI
- 【GD32F303开发之开发工具的安装与配置】
- PJzhang:左耳朵耗子-陈皓
- php access 单引号,Access VBA教程:字符串中的引号
- Rundll32.exe 如何运行dll中的函数
- 清华大学计算机学院张远,计算机系2019-2020学年度学生代表大会顺利召开
- 产业园区招商策划方案思路
- 对“数字+企业数字化+数据中台”的灵魂追问
- 【hadoop生态之Hbase】HBase部署与使用【笔记+代码】
- 小米9网络位置服务器,如何查看小米9手机当前的IP地址
- 【数据库】GaussDB
热门文章
- 计算机组成原理总结心得,计算机组成原理心得
- Apache Rewrite注意事项
- 想在抖音挣钱,带你了解抖音自媒体的流量获取攻略
- ESP8266如何使用u8g2(I2C)驱动SH1106的OLED
- C3P0整体类结构简单分析
- (QT) QUdpSocket / 在QT中通过Winsock2实现UDP通讯
- python弹幕代码_使用python对隐秘的角落进行弹幕分析
- Nginx日志文件清理
- bzoj 1176 Mokia (cdq分治)
- 点击某个物体人机验证码java,captcha: 行为验证码(滑动拼图、点选文字),前后端(java)交互,包含h5/flutter/uni-app的源码和实现...