`
coreoak
  • 浏览: 65281 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java设计模式_单线程模式

阅读更多
单态定义

    Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

    在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。

    还有, singleton能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。

    另外方面,Singleton也能够被无状态化。提供工具性质的功能,

    Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。

    我们常常看到工厂模式中类装入器(class loader)中也用Singleton模式实现的,因为被装入的类实际也属于资源。


    如何使用

    一般Singleton模式通常有几种形式:

public class Singleton {
  private Singleton(){}
  //在自己内部定义自己一个实例,是不是很奇怪?
  //注意这是private 只供内部调用 

  private static Singleton instance = new Singleton();
  //这里提供了一个供外部访问本class的静态方法,可以直接访问   
  public static Singleton getInstance() {
    return instance;   
   }
} 


    第二种形式:

public class Singleton {
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  //使用时生成实例! 
  if (instance==null)
    instance=new Singleton();
  return instance;   }
} 

    使用Singleton.getInstance()可以访问单态类。

    上面第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。

    注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。关于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的讨论,有兴趣者进一步研究。

    一般认为第一种形式要更加安全些。


    使用Singleton注意事项

    有时在某些情况下,使用Singleton并不能达到Singleton的目的,如有多个Singleton对象同时被不同的类装入器装载;在EJB这样的分布式系统中使用也要注意这种情况,因为EJB是跨服务器,跨JVM的。

    我们以SUN公司的宠物店源码(Pet Store 1.3.1)的ServiceLocator为例稍微分析一下:

    在Pet Store中ServiceLocator有两种,一个是EJB目录下;一个是WEB目录下,我们检查这两个ServiceLocator会发现内容差不多,都是提供EJB的查询定位服务,可是为什么要分开呢?仔细研究对这两种ServiceLocator才发现区别:在WEB中的ServiceLocator的采取Singleton模式,ServiceLocator属于资源定位,理所当然应该使用Singleton模式。但是在EJB中,Singleton模式已经失去作用,所以ServiceLocator才分成两种,一种面向WEB服务的,一种是面向EJB服务的。

    Singleton模式看起来简单,使用方法也很方便,但是真正用好,是非常不容易,需要对Java的类 线程 内存等概念有相当的了解。

    总之

    如果你的应用基于容器,那么Singleton模式少用或者不用,可以使用相关替代技术。

分享到:
评论

相关推荐

    java多线程设计模式_java_设计模式_多线程_多线程课题_

    Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到...

    Java多线程设计模式_清晰完整PDF版 Java多线程设计模式源代码

    Java多线程设计模式是Java开发中的重要领域,它涉及到如何在并发环境下高效、安全地管理资源和控制程序执行流程。本资料集包含了清晰完整的PDF版书籍和源代码,为学习和理解Java多线程设计模式提供了丰富的素材。 ...

    JavaDesignPatternNew_java设计模式_a282acom_complete1cj_源码

    在这个名为"JavaDesignPatternNew_java设计模式_a282acom_complete1cj_源码"的压缩包中,包含了多种Java设计模式的实现代码,为开发者提供了宝贵的参考资源。 1. **单例模式**:单例模式确保一个类只有一个实例,并...

    java多线程_设计模式_各种技术(我的书架)

    总的来说,Java多线程、设计模式以及相关的工具和技巧是每个Java开发者必备的知识,它们在提高程序效率和稳定性方面发挥着重要作用。通过深入学习和实践,开发者可以编写出更加高效、可靠的多线程应用程序。

    java多线程设计模式详解(PDF及源码)

    通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA设计模式的一本好书。(注意,本资源附带书中源...

    choujiangxitong.rar_JAVA 抽奖_抽奖_抽奖 JAVA_抽奖 线程_抽奖系统

    8. **设计模式**:可能采用了诸如单例模式(确保抽奖系统实例的唯一性)、生产者消费者模式(控制抽奖结果的生产和显示)等设计模式,以提高代码的可读性和可维护性。 9. **数据库连接**:虽然描述中没有明确提到,...

    Javadaima.rar_15个java_java 毕业设计_java 课程设计_图书管理系统 Java

    7. 设计模式:在图书管理系统中,可能会用到单例模式(管理数据库连接)、工厂模式(创建对象)或观察者模式(监听数据库变化并更新UI)等设计模式。 通过这15个Java课程设计,初学者可以逐步熟悉上述概念,加深对...

    JAVA多线程设计模式.pdf 下载

    标题和描述均指向了一个关于Java多线程设计模式的PDF文档的下载链接,这暗示了文档的主要内容将围绕Java中的多线程编程及其设计模式展开。在Java领域,多线程是一个核心概念,它允许程序执行多个任务同时进行,极大...

    java面试题_多线程(68题).zip

    以上知识点只是Java多线程面试中的一部分,实际面试可能还会涉及更多细节,如线程池的参数配置、并发设计模式、并发工具类的使用等。掌握好这些知识点,对于Java开发者的面试和实际工作都有极大的帮助。

    java面试题_多线程(68题)

    Java多线程是Java编程中的核心概念,尤其在面试中,它是考察开发者高级技能和并发理解的关键领域。这里,我们将深入探讨与Java多线程相关的68个面试问题,涵盖基础知识、线程安全、同步机制、线程池、死锁等关键知识...

    java多线程设计模式详解(PDF及源码).zip

    Java多线程设计模式是Java开发中的重要领域,它涉及到如何高效、安全地利用系统资源进行并发处理。在这个主题中,我们将深入探讨单线程、生产者与消费者模型以及Java中实现多线程的各种方法。 首先,单线程是程序...

    JAVA设计模式

    **JAVA设计模式** 在软件工程领域,设计模式是一种在特定情境下解决问题的可复用解决方案。它们是经验的总结,代表了在特定上下文中被广泛接受的、经过时间考验的最佳实践。Java设计模式是面向对象编程中的一种重要...

    Java多线程设计模式上传文件

    在Java编程中,多线程和设计模式是两个核心概念,尤其在处理并发任务时,如文件上传场景,它们的应用尤为重要。本项目旨在利用Java的多线程机制和设计模式来实现高效的文件上传功能。下面将详细介绍这两个方面的知识...

    ( java设计模式.zip

    Java设计模式是软件工程中的一种最佳实践,它是一种在特定情境下解决常见问题的经验总结。设计模式并不是具体的代码或库,而是对在软件设计中反复出现的问题及其解决方案的描述。这些模式提供了可重用的解决方案,使...

    Java设计模式(影印版)

    《Java设计模式(影印版)》一书深入探讨了软件设计中的模式概念,这是软件工程领域的一个重要主题。设计模式是一种在特定情况下解决常见问题的可重用解决方案,它们帮助开发者编写更清晰、更灵活、更易于维护的代码...

    java设计模式PPT

    以下是对标题“java设计模式PPT”所涵盖的一些关键知识点的详细说明: 1. **设计模式分类**: - **创建型模式**:如单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、...

    Java并发编程_设计原则和模式(CHM)

    本资源"Java并发编程_设计原则和模式(CHM)"聚焦于Java语言在并发环境下的编程技巧、设计原则以及最佳实践模式。 一、并发编程基础 并发编程涉及多个执行单元同时运行,这些单元可能是线程或进程。在Java中,主要...

    27_多线程_第2天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义

    线程安全是指当多个线程访问同一段代码时,如果每次结果都与单线程运行时相同,且不会产生其他意料之外的结果,那么这段代码就称为线程安全。在Java中,线程安全可以通过以下几种方式实现: 1. **互斥锁...

Global site tag (gtag.js) - Google Analytics