java 设计模式-单例模式-懒加载

首先推荐种最好的单例模式实现方式(没有之一)

public class Manager {

private Manager() {
        
    }
    
    public static Manager getInstance() {
        return ManagerHolder.instance;
    }
    
    private static class ManagerHolder {
        private static final Manager instance = new Manager();
    }
}

然后解释下为什么要用这种方式:

* 内部类只在需要的时候才会被类加载器加载,实现了懒加载,即在需要的时候才实例化出一个Manager,而且是唯一的一个

* 同时由于instance是static final类型,保证了内存中只有这样一个实例存在,而且只能被赋值一次,从而保证了线程安全性

(即使在高并发的情况下多个线程同时访问getInstance()方法 也能够保证实例的唯一性)

其他没有采用内部类的实现方式 以下是目前见过最好的:

public static class SingletonOptimizeLazy {
    static SingletonOptimizeLazy instance = null;
    public static SingletonOptimizeLazy getInstance() {
      if (instance == null) {
        createInstance();
      }
      return instance;
    }
    private synchronized static SingletonOptimizeLazy createInstance() {
      if (instance == null) {
        instance = new SingletonOptimizeLazy();
      }
      return instance;
    }
}

以上这种解决方式 主要思想是将实例化的过程抽象出来 放在一个sychronized方法中执行 这样也能够实现懒加载与并发安全

不过仍然推荐使用内部类的解决方案

时间: 2024-10-09 23:08:06

java 设计模式-单例模式-懒加载的相关文章

java单例模式-懒加载

单例模式-我们经常都在使用,以下是懒加载的两种实现方式,仅当学习! 方案一:synchronized private static SingletonLazy instance = null;private SingletonLazy(){};public static  SingletonLazy getInstance(){    if (null == instance){        createInstance();    }    return instance;} private

iOS设计模式之懒加载

一.为什么要懒加载? 答: iPhone设备内存有限,如果在程序在启动后就一次性加载将来会用到的所有资源,那么久可能会耗尽iOS设备的内存.这些资源例如大量的数据,图片,音频,过多的控件等. 二.懒加载思想是什么? 答: 简单的将就是拖到最后一刻,万不得已了,才加载,才开始占用资源.所谓懒加载,写的就是其getter方法.在开发中,当程序中需要利用的资源时,在程序启动的时候不加载,只有在运行当需要这些资源的时候再去加载这些资源. 三: 懒加载的好处 答: 1.不必将创建对象的代码全部写在view

纯js懒加载,java后台举例

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 function getElementsByClassName(str,root,tag){        if(root){            root = type

设计模式(节流模式-----图片懒加载)

昨天把节流模式写了下,今天来个节流模式的应用----图片懒加载(图片延迟加载) 废话不多说,直接懒加载代码吧!哈哈 1 //创建懒加载对象 @id是将要获取外部容器的id var Lazyload = function(id) { 2 this.container = document.getElementById(id); 3 this.imgs = this.getImgs(); 4 this.init();//初始化 5 } 6 Lazyload.prototype = { 7 //初始化

【java】itoo项目实战之hibernate 懒加载优化性能

在做itoo 3.0 的时候,考评系统想要上线,就开始导入数据了,只导入学生2万条数据,但是导入的速度特别的慢,这个慢的原因是因为导入的时候进行了过多的IO操作.但是导入成功之后,查询学生的速度更加慢,因为底层用了hibernate的hql语句进行查询的,学习过hibernate的人都知道,如果hibernate不设置懒加载的话,只有是有关联的数据都会一次性全部都查询出来,我试了试,查询2万条数据,最深的级联查询是有5层,然后发出来的语句是460条,时间大概是10s.然后就考虑使用lazy进行优

java设计模式 - 单例模式(干货)

深度讲解23种设计模式,力争每种设计模式都刨析到底.废话不多说,开始第一种设计模式 - 单例. 作者已知的单例模式有8种写法,而每一种写法,都有自身的优缺点. 1,使用频率最高的写法,废话不多说,直接上代码 /** * @author xujp * 饿汉式 静态变量 单例 */ public class Singleton implements Serializable { private static final long serialVersionUID = 1L; private fina

(Object-C)学习笔记 --OC的懒加载和单例方法

OC的懒加载 什么是懒加载: 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化. 懒加载的好处 (1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 (2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 懒加载的例子: #import "MusicTableViewController.h&quo

hibernate延迟加载(懒加载)详解

Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载.Hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能. 下面先来剖析 Hibernate 延迟加载的"秘密". 集合属性的延迟加载 当 Hibernate 从数据库中初始化某个持久化实体时,该实体的集合属性是否随持久化类一起初始化呢?如果集合属性里包含十万,甚至百万的记录,在初始化持久化实体的同时, 完成所有集合属性的抓取,

Java 设计模式 单例模式(Singleton) [ 转载 ]

Java 设计模式 单例模式(Singleton) [ 转载 ] 转载请注明出处:http://cantellow.iteye.com/blog/838473 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创建对象 第一种(懒汉,线程不安全): 1 public class Singleton { 2 private static Singleton instance; 3 private Singleton (){} 4 5 public static Singleton getInstan