![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java->java基础->单例模式
Ricky_Monarch
有问题加我微信,愿意和大家互相讨论,微信号见分栏的图片,可扫码添加
展开
-
11_实现线程安全的懒汉式单例的几种方法
1、同步延迟加载 — synchronized方法该实现与上面传统懒汉式单例的实现唯一的差别就在于:是否使用 synchronized 修饰 getSingleton2()方法。若使用,就保证了对临界资源的同步互斥访问,也就保证了单例。 从执行结果上来看,问题已经解决了,但是这种实现方式的运行效率会很低,因为同步块的作用域有点大,而且锁的粒度有点粗。同步方法效率低,那我们考虑使用同步...原创 2019-08-14 09:21:56 · 332 阅读 · 0 评论 -
09_为什么说饿汉式单例是线程安全的?
类加载的方式是按需加载,且只加载一次。因此,在上述单例类被加载时,就会实例化一个对象并交给自己的引用,供系统使用。换句话说,在线程访问单例对象之前就已经创建好了。再加上,由于一个类在整个生命周期中只会被加载一次,因此该单例类只会创建一个实例,也就是说,线程每次都只能也必定只可以拿到这个唯一的对象。因此就说,饿汉式单例天生就是线程安全的。...原创 2019-08-13 09:30:20 · 3288 阅读 · 1 评论 -
08_如何编写一个程序测试单例模式是否是线程安全的?
开启多个线程来分别获取单例,然后打印它们所获取到的单例的hashCode值。若它们获取的单例是相同的(该单例模式的实现是线程安全的),那么它们的hashCode值一定完全一致;若它们的hashCode值不完全一致,那么获取的单例必定不是同一个,即该单例模式的实现不是线程安全的,是多例的。public class TestThreads extends Thread { @Override...原创 2019-08-13 09:27:02 · 388 阅读 · 0 评论 -
07_单例模式的使用场景
核心就是为整个系统提供唯一的实例有状态的工具类对象 频繁访问数据库或文件的对象 Spring中bean的单例和多例模式 singleton(单例):只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实例。 prototype(多例):对这个bean的每次请求都会创建一个新的bean实例,类似于new。 Spring bean ...原创 2019-08-13 09:18:53 · 121 阅读 · 0 评论 -
06_单例模式的优点
在内存中只有一个对象,节省内存空间 避免频繁的创建销毁对象,可以提高性能 避免对共享资源的多重占用,简化访问 为整个系统提供一个全局访问点。...原创 2019-08-13 09:14:52 · 111 阅读 · 0 评论 -
05_懒汉式单例的特点以及代码
//懒汉式单例public class Singleton2 { // 指向自己实例的私有静态引用 private static Singleton2 singleton2; //私有的构造方法 private Singleton2(){} // 以自己实例为返回值的静态的公有方法,静态工厂方法 public static Singleton...原创 2019-08-13 09:09:55 · 269 阅读 · 0 评论 -
04_饿汉式单例的特点以及代码
//饿汉式单例public class Singleton1 { //指向自己的私有静态引用,主动创建 private static Singleton1 singleton1 = new Singleton1(); //私有的构造方法 private Singleton1(){} //以自己实例为返回值的静态的共有方法,静态工厂方法 publ...原创 2019-08-13 09:05:51 · 100 阅读 · 0 评论 -
03_立即加载和延迟加载的概念
立即加载:在类加载初始化的时候就主动创建实例,对应饿汉模式延迟加载:等到真正使用的时候才去创建实例,不用时不去主动创建,对应懒汉模式...原创 2019-08-13 09:01:44 · 166 阅读 · 0 评论 -
02_单例模式的三要素
私有的构造方法 指向自己实例的静态引用 以自己实例为返回值的静态共有方法原创 2019-08-13 08:58:17 · 734 阅读 · 0 评论 -
01_单例模式的定义
确保一个类只有一个实例原创 2019-08-13 08:56:32 · 132 阅读 · 0 评论 -
10_传统的懒汉式单例为什么是非线程安全的?
上面发生非线程安全的一个显著原因是,会有多个线程同时进入 if (singleton2 == null) {…} 语句块的情形发生。当这种这种情形发生后,该单例类就会创建出多个实例,违背单例模式的初衷。因此,传统的懒汉式单例是非线程安全的。...原创 2019-08-13 09:32:33 · 947 阅读 · 0 评论