单例中懒汉和饿汉的本质区别

单例中懒汉和饿汉的本质区别在于以下几点:

  1、饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。

  2、从实现方式来讲他们最大的区别就是懒汉式是延时加载,他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,饿汉式无需关注多线程问题、写法简单明了、能用则用。但是它是加载类时创建实例(上面有个朋友写错了)、所以如果是一个工厂模式、缓存了很多实例、那么就得考虑效率问题,因为这个类一加载则把所有实例不管用不用一块创建。

时间: 2024-10-05 04:27:39

单例中懒汉和饿汉的本质区别的相关文章

单例之懒汉式和饿汉式

所谓“懒汉式”与“饿汉式”的区别,是在与建立单例对象的时间的不同. “懒汉式”是在你真正用到的时候才去建这个单例对象: public class Singleton{ private Singleton(){} private static Singleton singleton = null: //不建立对象 public static synchronized Singleton getInstance(){ if(singleton == null) { //先判断是否为空 singlet

(单例设计模式之一)饿汉式的反射与反序列化漏洞

1.闲话少说,直接上代码. import java.io.Serializable;//饿汉式public class Singleton01 implements Serializable{    //1.私有的属性    private static Singleton01 instance=new Singleton01();    //2.私有的构造器    private Singleton01(){}    //3.共有的get()方法    public static  Singl

Java面试题之在多线程情况下,单例模式中懒汉和饿汉会有什么问题呢?

懒汉模式和饿汉模式: public class Demo { //private static Single single = new Single();//饿汉模式 private static Single single2 = null;//饿汉模式 public Demo() { if (single2 == null) {//1 single2 = new Single();//2 } } } 在多线程环境下,代码1和代码2之间,这里会有线程安全问题,线程A和线程B同时到代码1和代码2之

C++ 单例模式(懒汉、饿汉模式)

1.简单的单例模式实现 2.C++的构造函数不是线程安全的,所以上述代码在多线程的情况下是不安全的,原因是new Singelton时,这句话不是原子的,比如一个线程执行了new的同时,另一个线程对if进行判断(此时实例还没被创建出来).在windows下模拟: #include <iostream> #include <process.h> #include <windows.h> using namespace std; class Singelton{ priva

java软件设计模式——单例设计模式中的【饿汉式】与 【懒汉式】示例

以下为单例设计模式中的两种经典模式的代码示意: 1 单例设计模式(spring框架IOC,默认创建的对象都是单例的): 2 饿汉式: 3 public class SingleClass { 4 private SingleClass(){} //私有化构造方法 不能new对象 5 private static final SingleClass s=new SingleClass(); 6 //返回本类对象 7 public static SingleClass getInstance(){

字符类型和控制语句、函数、懒汉、饿汉式

1. 小数默认为double类型. 2. 逻辑运算符:&&,||,!,&,|,^ 3. 位运算:      & ,|,^,~,<<,>>,>>> a^b^b = a(得到本身) 位运算是最快的运算方法 两个数值的调换位置的方法: 1.设置一个变量 int a = 1,b  = 2,c; c = a; a = b; b = c; 2.直接通过相加减我完成 int a  = 1,b = 2; a = a + b; b = a - b;

从C#角度 单例模式 懒汉和饿汉

单例模式:         关键点: 1.一个类只有一个实例: 2.类自行创建该实例: 3.类自行向整个系统提供该实例. 代码展示: namespace SingleTon { /// <summary> /// 懒汉单例.多线程安全 /// 比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢 /// </summary> public class LazySingleTon { private static LazySingleTon instance =

单例模式[ 懒汉模式 | 饿汉模式 ]

程序开发中,有些对象只需要一个,比如 配置文件/ 工具类/ 线程池/ 缓存/ 日志对象等.只需要一个单例模式: 可以保证某些对象在程序运行中只有唯一的一个实例.显然单例模式的要点有三个:一是某个类只能有一个实例:二是它必须自行创建这个实例:三是它必须自行向整个系统提供这个实例. 具体实现角度来说:one:单例模式的类只提供私有的构造函数,two:类定义中含有一个该类的静态私有对象,thr:该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象 单例模式:应用场合: 有些类的对象只需要一

懒汉模式和饿汉模式的区别

懒汉模式:在类加载的时候不被初始化. 饿汉模式:在类加载时就完成了初始化,但是加载比较慢,获取对象比较快. 饿汉模式是线程安全的,在类创建好一个静态对象提供给系统使用,懒汉模式在创建对象时不加上synchronized,会导致对象的访问不是线程安全的. synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C. D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(