`
wwwlgy
  • 浏览: 8689 次
社区版块
存档分类
最新评论

java小技巧共享(单例的惰性初始化)

 
阅读更多

单例模式,不多说了,这个模式和静态函数有什么区别,之前解释过了,不是今天重点。
这个贴的重点是,单例模式的这个单例,如何初始化。
其实单例的初始化有两种:一种是提前初始化,就是说,在程序使用单例时,先由其他程序保证这个实例已经初始化结束。
这个比较简单,也不是本贴的重点。
另外一种就是程序一开始不初始化,仅仅在单例第一次被调用的时候被初始化。
中间怎么演变就不说了。总之这里技巧是要解决一个矛盾:第一次使用时初始化,就必需要用同步机制,在对象使用前是否已经初始化。
但是加锁后,极大的降低了程序的性能,尤其判断比较复杂的时候。曾经有文章在设计模式界批判“单例是魔鬼”就出于此。
现在很多的补充做法可以尽量的避免这种方式。文字不好解释,给个代码模型吧。
public class Singl{
/**
*单例形成,不允许外部实例化
*/
private Singl(){
}

private static Singl instance;

private Object lock = new Object();
private static Singl getSingl(){
if (instance == null){//第一次判断不要同步
synchronized(lock){//第二次在上锁同步,且要再判断一次
if (instance == null){//第一次判断不要同步
instance = new Singl()
}
}
}
return instance;
}
}
搞定!

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    设计模式——单例

    这样的实现既保证了单例的唯一性,又实现了惰性初始化。 单例模式虽然有很多优点,但也存在一些潜在问题,比如它可能造成难以测试的代码,因为它隐藏了依赖关系。此外,过度使用单例可能导致代码过于紧密耦合,不...

    单例模式.ppt

    它在`getInstance()`方法中加入两次检查`instance`是否为null,只有在确认未初始化时才进行同步创建。这种方式在Java早期版本中可能存在问题,但在JVM的内存模型改进后,已成为一种有效的实现方式。 4. **静态内部...

    设计模式之单例模式

    3. **惰性初始化**:只有当确实需要时才进行实例化。 4. **线程安全**:在多线程环境下也能正确工作。 #### 使用场景 - 数据库连接管理:通过单例模式可以有效地控制数据库连接资源,避免频繁地打开和关闭连接导致...

    《设计模式》学习笔记

    例如:`工厂方法模式`(Factory Method)、`抽象工厂模式`(Abstract Factory)、`建造者模式`(Builder)、`原型模式`(Prototype)和`单例模式`(Singleton)等。 2. **结构型模式(Structural Patterns)**:...

    简单探索 Java 中的惰性计算

    Java 中的惰性计算和惰性迭代器 惰性计算是许多函数式编程语言的特性,它允许延迟表达式的求值,直到实际需要时再计算。这篇文章将探索 Java 中的惰性计算,讨论其原理、优点和实现方式。 惰性计算的优点 惰性...

    Scala集合(二)Java开发Java经验技巧共10页

    【标题】"Scala集合(二)Java开发Java经验技巧共10页" 指的是一份关于Scala集合和Java开发技巧的文档,该文档共包含10页内容,可能是详细讲解了如何在Scala编程中使用集合,并结合了Java开发的经验和技巧。...

    Lazy-Collection:用于 Java 的非严格(惰性)集合,其中可以基本上形成一系列函数,并且仅在请求时执行评估。 它使用 Java 7 作为默认 jdk 版本

    懒惰收集用于 Java 的非严格(惰性)集合,其中可以基本上形成一系列函数,并且仅根据需要执行评估。 它使用 Java 7 作为默认 JDK 版本。 该项目针对 JDK 7,因此不会有 lambda 和 java 8 流支持。 如果您正在寻找 ...

    JavaScript编程的单例设计模讲解

    在大型项目中,通过模块化的单例模式,可以实现更好的模块性和代码组织性。此外,单例模式允许每个模块惰性加载,从而在需要时才加载和执行相应的代码,这对于提升应用性能尤其重要。总结起来,单例模式在代码维护、...

    第八课 单例模式1

    这种方式通常用于当实例化对象需要一些时间或资源时,可以避免在程序启动时就进行不必要的初始化。以下是一个惰性单例模式的HTML页面示例: ```html <!DOCTYPE html> , initial-scale=1.0"> 惰性单例模式 ...

    Java正则之贪婪匹配、惰性匹配

    Java正则表达式是编程语言中用于处理字符串的强大工具,其中两种重要的匹配模式是贪婪匹配和惰性匹配。这两种模式涉及到正则表达式中的量词,它们决定了匹配字符的次数和方式。 贪婪量词(Greedily Quantifiers)在...

    Java多线程编程环境中单例模式的实现

    主要是由于Java内存模型的问题,新创建的对象可能在构造完成之前就被其他线程看到,导致`instance`变量处于未完全初始化的状态。不过,现代JVM已经解决了这些问题,因此在现代Java环境中,这种方法是可以接受的。 #...

    .Net 单例模式(Singleton)

    实现单例模式的方法有很多,其中一种简单的方式是惰性实例化,这种方式直到对象被要求时才进行初始化。但是,这种实现并不适合多线程环境,因为在多个线程同时执行实例检查和实例化的过程中,可能会产生多个实例,...

    Java基础1

    - 惰性初始化,是指在第一次使用成员变量时才进行初始化,通常用于避免不必要的计算或资源消耗。 2. **数据类型**: - Java有基本数据类型(如int、char、boolean等)和引用数据类型(如类、接口和数组)。 - ...

    java代码优化编程共11页.pdf.zip

    5. **延迟初始化和惰性加载**:只有在真正需要时才初始化对象,例如使用Double-Checked Locking或枚举单例实现。 6. **并发优化**:在多线程环境下,使用并发集合类如ConcurrentHashMap,避免synchronized关键字的...

    xiaoblack163#Note-1#javascript单例模式1

    单例模式的例子:闭包实现私有成员的单例模式例子:var Ellyliang = (function() {闭包实现私有成员的惰性实例化单例模式:var Elly

    Python中的单例模式的几种实现方式的及优化

    为了提高效率,可以使用“惰性初始化”(lazy initialization),即只有在首次访问时才创建实例: ```python class Singleton(object): _instance = None _lock = threading.Lock() def __new__(cls, *args, **...

    设计模式之Singleton

    1. **懒汉式**:也称为惰性初始化,只有在第一次调用getInstance()方法时才创建单例对象。优点是线程安全,缺点是多线程环境下可能会造成多个实例。 ```java public class Singleton { private static Singleton...

    轻松把握JavaScript单例模式_.docx

    总的来说,JavaScript的单例模式通过控制类的实例化,确保了全局环境中只有一个特定对象的存在,这在处理共享资源和优化性能时非常有用。通过不同的实现方式,我们可以根据需求选择最适合的单例模式实现。

    NSDateFormatter性能优化

    推荐的第三种方法是采用惰性初始化(Lazy Initialization)并结合缓存。只有在真正需要格式化日期时才创建`NSDateFormatter`,并且创建后将其存储在一个字典或数组中,根据特定的格式作为键。这样,当再次需要相同...

Global site tag (gtag.js) - Google Analytics