首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java实现单例模式(懒汉饿汉

三、饿汉单例 四、懒汉单例 4.1 单线程下 4.2 多线程下(简单版) 4.3 多线程下(增强版) 总结 ---- 前言 博主个人社区:开发与算法学习社区 博主个人主页:Killing Vibe的博客...三、饿汉单例 有了上述的思路,就可以写出饿汉单例了: public class SingleTon { // 惟一的这一个对象 private static SingleTon singleTon...对象已经产生过了,多线程场景下取回的是同一个单例对象 public static SingleTon getSingleton() { return singleTon; } } 饿汉单例...总结 以上就是多线程场景下用Java实现饿汉单例和懒汉单例的所有注意事项,纯手打,希望各位老铁能多多支持,有什么疑问可以私信博主~~~感谢支持

35250
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    04-01-设计模式 单利模式

    Hibernate可能现在基本用的不多了,但是Spring大家应该都用, 在Spring中, 一般声明的Bean, 如果没有特殊配置, 那么它就是单利单利模式实现的八种方式 饿汉(静态常量) 饿汉...(静态代码块) 懒汉(线程不安全) 懒汉(线程安全, 同步方法) 懒汉(线程安全, 同步代码块) 双重检查 静态内部类 枚举 饿汉(静态常量) 步骤 私有化构造方法(防止 new) 类的内部创建对象...getInstance 代码 package com.dance.design.designmodel.simpleinterestmodel; public class SimpleOne { } /** * 饿汉...JDK源码中的单利模式 JDK中 java.long.Runtime就是经典的单利模式(饿汉) 代码 package java.lang; import java.io.*; import java.util.StringTokenizer...一上来就new 所以是饿汉(静态变量) private static Runtime currentRuntime = new Runtime(); // 提供对外的公共静态方法

    36730

    【单例模式】饿汉,懒汉JAVA如何实现单例?线程安全吗?

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 Java单例设计模式 单例设计模式(Singleton...对外提供获取该实例的方式: 直接暴露 用静态变量的get方法获取 饿汉饿汉:直接创建对象,不存在线程安全问题。...(在类初始化时直接创建对象,不管你是否需要这个对象都会创建) 实现方式: 直接实例化饿汉(简洁明了) 枚举(最简洁) 静态代码块饿汉(适合复杂实例化) 直接实例化 //Singleton:单例设计模式...,软件开发中常见的设计模式之一 //单例设计模式——饿汉1:直接实例化饿汉 /* * 1.构造器私有化 * 2.自行创建,并且用静态变量保存 * 3.向外提供这个实例 * 4.使用final...懒汉:延迟创建对象。

    21650

    Java多线程编程-(12)-单例模式几种写法的错与对

    Java多线程编程-(11)-面试常客ThreadLocal出现OOM内存溢出的场景和原理分析 一、背景知识 在所有的主流23中设计模式中,单例模式作为最简单也最容易理解也是使用最普遍的设计模式,他是一种对象创建模式...为什么会在多线程这里说道单利模式那?这是因为在多线程情况下不正确的使用单利模式会造成整个程序的错误执行,因此单利模式我们也应该坐下来细细研究一下!...单利模式的七种写法主要是:懒汉模式线程不安全、懒汉模式线程安全、饿汉模式、变种的饿汉模式、双重校验锁DCL、静态内部类、枚举类型。...下边主要分析一下:饿汉模式、懒汉模式线程安全、双重校验锁DCL、静态内部类四种,其他几种大致类似,不在赘述。 二、饿汉模式 饿汉模式代码如下: ?...有兴趣的可参考: Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-从一个错误的双重校验锁代码谈一下volatile关键字 五、静态内部类 静态内部类可以说是集成了上述代码的所有优点

    72020

    设计模式:单例模式 (关于饿汉和懒汉)

    懒汉和饿汉 在程序编写上,一般将单例模式分为两种,分别是饿汉和懒汉饿汉:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。...懒汉:在类加载时不初始化,等到第一次被使用时才初始化。...代码实现 1、饿汉 (可用) public class Singleton { private final static Singleton INSTANCE = new Singleton();...6、枚举 (可用、推荐) public enum Singleton { INSTANCE; } 这种写法在《Effective JAVA》中大为推崇,它可以解决两个问题: 1)线程安全问题。...因为Java虚拟机在加载枚举类的时候会使用ClassLoader的方法,这个方法使用了同步代码块来保证线程安全。 2)避免反序列化破坏对象,因为枚举的反序列化并不通过反射实现。

    96120

    单例模式和多例模式(懒汉饿汉

    方便资源相互通信的环境 四、举例 1、懒汉 你用的时候,我再去给你创建对象 class Singleton{ private static Singleton single;...single =new Singleton(); return single; } } 优点: 第一次调用才初始化,避免浪费内存 缺点: 加锁了执行效率低 2、饿汉...缺点: 类加载时就初始化,浪费内存 3、Double CheckLock实现单例: Double CheckLock也就是双重锁判断机制(由于JVM底层模型原因,偶尔会出问题, 不建议使用),是在懒汉单例上发展而来...这种方式是 Effective Java 作者 Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还自动支持序列化机制,防止反序列化重新创建新的对象,绝对防止多次实例化。

    33720

    Java单例模式的不同写法(懒汉饿汉、双检锁、静态内部类、枚举)

    目录 1、饿汉模式 2、懒汉模式 3、双重校验锁【推荐】 4、静态内部类【推荐】 5、枚举 6、单例模式的线程安全性 ---- Java中单例(Singleton)模式是一种广泛使用的设计模式。...1、饿汉模式 // 饿汉模式 public final class Singleton { private static Singleton instance=new Singleton();/...饿汉模式是最简单的一种实现方式,饿汉模式在类加载的时候就对实例进行创建,实例在整个程序周期都存在。...这样的话,只要应用中不使用内部类,JVM就不会去加载这个单例类,也就不会创建单例对象,从而实现懒汉的延迟加载。也就是说这种方式可以同时保证延迟加载和线程安全。...单例模式有很多种的写法,我总结一下: (1)饿汉:线程安全 (2)懒汉:非线程安全 (3)双检锁:线程安全 (4)静态内部类:线程安全 (5)枚举:线程安全 如何选择 如果我们在程序启动后

    1.3K30

    scala:分别使用懒汉饿汉实现单例模式

    java中,单例模式需要满足以下要求: 构造方法私有化,使得本类之外的地方不能使用构造方法new出对象 提供私有静态属性,接收单例对象 公共的、静态的getInstance方法,便于外界拿到单例对象...想了解Java单例模式的请转到:Java单例模式-懒汉、恶汉、静态内部类、枚举以及线程安全问题 在scala中 主构造方法私有化,即类名后面加上private修饰 使用类的伴生对象达到Java中的static...效果,伴生对象只会加载一次 /** * Desc: SCALA单例设计模式 * -懒汉 * -饿汉 */ object Scala16_TestSingleton { def...和std2输出的地址一样 val std2: Student16 = Student16.getInstance() println(std2) } } //懒汉...null def getInstance():Student16={ if(s == null){ s = new Student16 } s } } //饿汉

    77010

    单例设计模式-------懒汉饿汉(超详细,附代码)

    单例设计模式-------懒汉饿汉 单例设计模式是一种很常见的设计模式 ?...在这里介绍两种单例设计模式 懒汉饿汉 单例设计模式的特点: 1.单例设计模式保证一个类只有一个实例。 2.要提供一个访问该类对象实例的全局访问点。...分析举例 在JAVA中单例设计模式 1.饿汉如下所示 /** * Created by ${wuyupku} on 2019/3/15 12:39 */ class Singleton01{...这里预先说明一下 其实在多线程的环境下,饿汉是没有问题的,但是懒汉这种延迟加载的方式会出现线程安全问题的,下面我们通过例子加以说明。 4.在多线程环境下运行饿汉与懒汉 ? ?...为什么饿汉就保证了对象的唯一性了而懒汉却不能保证对象的唯一呢? 这里我们要分析的就饿汉和和懒汉那两个对象了Singleton1,与Singleton2了。

    11K14

    JAVA中各种单例模式的实现与分析

    缺点在于,饿汉单例模式,无论所需的对象是否被用到,一上来就会先创建这个对象,如果这个对象在整个业务过程中不被用到,那么势必会造成内存的浪费。...考虑到基本的懒汉单利模式的线程安全的问题,最简单粗暴的方式就是在getInstance方法上加锁。...SingletonDemo4.getInstance().hashCode()); }).start(); }); } } 通过在getInstance方法上加synchronized来实现的懒汉单利模式...8.懒汉单利模式–静态内部类 代码如下: package com.dhb.gts.javacourse.week5.singleton; import java.util.concurrent.TimeUnit...9.懒汉单利模式–利用枚举 代码如下: package com.dhb.gts.javacourse.week5.singleton; import java.util.stream.IntStream

    38320

    Java 单例模式

    Java 中,单例模式的实现又分为两种,一种称为懒汉,一种称为饿汉。其实就是在具体创建对象实例的处理上,有不同的实现方式。...这是懒汉方式的单例模式 懒汉单利模式下无论调用多少次getInstance()方法 懒汉:都只会创建一个实例 三个变量是否为同一个实例:true 懒汉:都只会创建一个实例 在本例中,我们调用了三次...:这是饿汉的单例模式 饿汉:与懒汉单例模式的差别不大 饿汉:唯一的区别在于存储实例的变量何时初始化 三个变量是否为同一个实例:true 饿汉:唯一的区别在于存储实例的变量何时初始化 饿汉与懒汉的特性没有任何不同...既然单例模式的饿汉与懒汉并没有特性上的区别,因此我们就只用一种方式去改写就好了,这里选择懒汉: AppConfig.java: package singleton; import java.io.IOException...时间换空间 饿汉:空间换时间 线程安全 懒汉:不加同步则线程不安全 饿汉:线程安全 3.5 更好的实现方式 懒汉的优势在于实现了延迟加载,而饿汉的优势在于线程安全。

    58900

    【说站】java懒汉和饿汉模式的区别

    java懒汉和饿汉模式的区别 区别 1、懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。...2、饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了 线程安全: 饿汉天生线程安全,可直接用于多线程,无任何问题, 懒汉风格本身是非线程安全的(双检锁解决并发问题...) 资源加载和性能: 饿汉在类创建的同时实例化一个静态对象出来,无论以后是否使用该单例,都会占用一定的内存,但相应地,由于其资源已初始化,第一次调用的速度也会更快。...懒汉,会延迟加载,在第一次使用本单例时才会出现实例对象,第一次调用时要做初始化,如果要做的工作比较多,性能会有些延迟,以后就像饿汉一样。...{         return "Cat{" +                 "name='" + name + '\'' +                 '}';     } } 以上就是java

    36430

    Java设计模式-单例模式

    首先声明就是 在我们项目工程中 我们完全不用使用懒汉 因为有锁使用的地方就有效率低的存在;  饿汉 顾名思义,饿汉,就是使用类的时候不管用的是不是类中的单例部分,都直接创建出单例类,看一下饿汉的写法...SingleEager(); public static SingleEager getInstance() { return se; } } 这就是饿汉单例模式的写法...Java虚拟机2:Java内存区域及对象,文中可以看一下对象创建这一部分,没有写得很详细,其实就是"虚拟机采用了CAS配上失败重试的方式保证更新更新操作的原子性和TLAB两种方式来解决这个问题"。...双检锁【其实这个地方叫做 带锁的双检懒汉单利模式】 既然懒汉是非线程安全的,那就要改进它。...,Runtime类的写法: public class Runtime { private static Runtime currentRuntime = new Runtime(); //使用饿汉

    46350
    领券