常见的几种单例模式

单例模式?:系统运行期间,有且仅有一个实例!

1:它必须自行创建这个实例(定义了静态的该类私有对象)

2:一个类只有一个实例(只提供私有构造器(核心))

3:它必须自行向整个系统提供这个实例(提供一个静态的公有的方法,返回创建或者获取本身的静态私有对象)

这样的单例在高并发的时候存在线程不安全的弊端

懒汉模式实现单例

1:在类加载时不创建实例,采用延迟加载的方式,在运行时调用创建实例

2:特点是,线程不安全,但是延迟加载lazy loading,减轻开销

解决办法:用synchronized 关键字保证线程安全

publicclass Person {

//提供私有的静态的该类的属性(懒汉式|饿汉式)

private
static Person person=null;

//私有的构造

private Person(){}

//公共的静态同步方法

public
static
synchronized Person getPerson(){

if(person==null){

person = new Person();

}

returnperson;

}

}

饿汉模式实现单例

1:在类加载的时候就完成初始化

2:特点:线程安全,速度快。

3:问题:不具备延迟加载的特点。

有的时候实例化单例类(ConfigManager)很消耗资源,我们希望能延迟

加载,如何处理呢?--静态内部类

publicclass Person {

//提供私有的静态的该类的属性(懒汉式|饿汉式)

private
static
final Person person= new Person();

//私有的构造

private Person(){}

//公共的静态同步方法

public
static
synchronized Person getPerson(){

return
person;

}

}

Java机制规定,内部类 MyObjectHandle只有在getInstance()方法第一次调用的时候才会被加载(实现了延迟加载效果),而且其加载过程是线程安全的(实现线程安全)。内部类加载的时候实例化一次instance。

时间: 2024-10-13 00:38:42

常见的几种单例模式的相关文章

常见的几种单例模式写法

单例模式:是一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类.一个类只有一个实例,即一个类只有一个对象实例. 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:售票时,一共有100张票,可有有多个窗口同时售票,但需要保证不要超售(这里的票数余量就是单例,售票涉及到多线程).如果不是用机制对窗口对象进行唯一化将弹出多个窗口,如果这些窗口显示的都是相同的内容,重复创建就会浪费资源. 应用场景(来源:<大话设计模式>)

常见的五种单例模式实现方式

--主要: 饿汉式(线程安全,调用效率高,但是不能延时加载) 懒汉式(线程安全,调用效率低,但是可以延时加载) --其他: 双重检测锁式(由于JVM底层内部模型原因,偶尔会出现问题,不建议使用) 静态内部类式(线程安全,调用效率高,可以延时加载) 枚举式(线程安全,调用效率高,不能延时加载) -- 如何选用? 单例对象   占用   资源 少,不需要   延时加载:  枚举式   好于  饿汉式 单例对象   占用   资源 大, 需要   延时加载:   静态内部类式   好于   懒汉式 引

五种单例模式实现

核心作用: 保证一个类只有一个实例,并向外提供一个访问该实例的访问点. 常见场景: 数据库连接池的设计一般也是单例模式 在Servlet编程中,每个Servlet也是单例模式 在Spring中,默认创建的bean也是单例模式 ...... 优点: 1.由于每个类只创建一个实例,大大减少了内存的开销. 2.单例模式提供全局访问点,可以实现共享资源访问. 常见的五种单例模式实现方法: 饿汉式(线程安全,效率高,不能延迟加载) 懒汉式(线程安全,效率不高,可以延迟加载) DCL懒汉式(线程安全,效率还

Android常见的三种内部类

在java里类中再定义类,这种在其他类内部类叫做内部类,在Android开发里最常见有三种内部类分别是(成员内部类.方法内部类.匿名内部类) 一.成员内部类 1 public class Test { 2 //不对外开放的 3 class memberInnerClass{ 4 public void memberInner(){ 5 System.out.println("成员内部类"); 6 } 7 } 8 } 编译一下,我们看到目录中出现了两个class文件在我们的工作目录里,可

Java中常见的几种RuntimeException

一般面试中java Exception(runtimeException )是必会被问到的问题常见的异常列出四五种,是基本要求.更多的....需要注意积累了 常见的几种如下: NullPointerException - 空指针引用异常ClassCastException - 类型强制转换异常.IllegalArgumentException - 传递非法参数异常.ArithmeticException - 算术运算异常ArrayStoreException - 向数组中存放与声明类型不兼容对象

常见的三种Web服务架构

常见的三种Web服务架构 转自http://www.cnblogs.com/bvbook/archive/2008/12/24/1360942.html 相互竞争的服务架构 The Competing Architectures 我们已经给出了“不同Web服务会有不同做法”的两个主要问题,现在要据此对不同风格的Web服务进行分类了.根据我的研究,常见的Web服务架构主要有三种:REST式架构.RPC式架构和REST-RPC混合架构.下面依次对它们进行介绍. REST式.面向资源的架构 RESTf

五种单例模式

今天算是完完整整把老高的单例模式看了,差不多也懂了,个别不懂的再补吧,下面介绍一下5种单例模式: 饿汉式实现:线程安全,调用效率高.但是,不能延时加载. 懒汉式实现:线程安全,调用效率不高.但是,可以延时加载. 双重检测锁式:由于JVM底层内部模型原因,偶尔会出现问题,不建议使用. 静态内部类式:线程安全,调用效率高,可以延时加载. 枚举式:线程安全,调用效率高.但是,不能延时加载(避免反射和反序列化的漏洞). 以下先介绍一下5种单例模式: 饿汉式实现: /** *单例模式:饿汉模式 *线程安全

Java中常见的5种WEB服务器介绍

这篇文章主要介绍了Java中常见的5种WEB服务器介绍,它们分别是Tomcat.Resin.JBoss.WebSphere.WebLogic,需要的朋友可以参考下 Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问.开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的Web服务器,比较常用的有Tomcat.Resin.JBoss.WebSphere 和 WebLogic 等,下面将分别进行介绍. Tomc

Java中的五种单例模式实现方法

[代码] 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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 package s