饿汉式: //饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变, //这种单利模式比较简单,也比较可靠,唯一不足就是无法对singleton实例做延迟加载。 public class Singleton{ private static Singleton singleton = new Singleton (); private Singleton (){ System.out.println("这里创建单例过程可能会比较慢"); } public static Singleton getInstance(){ return singletion; } public static void createStringTask(){ System.out.println("这是模拟单例其他任务操作"); } } //*输出结果为:这里创建单例过程可能会比较慢 这是模拟单例其他任务操作 //*从输出结果我们可以看到,虽然并没有使用单例类,但它还是被创建出来了,这也许是开发人员所不 愿意看到的。为了解决这个问题,并以此提高系统在相关函数调用时反应的速度,就需要下面的延迟 加载方式来解决以上问题。 懒汉式: //懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。 //他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建。 public class LazySingleton{ private static LazySingleton lazySingleton = null; pirvate LazySingleton(){ System.out.printl("这里创建单例很慢"); } public static synchronized getInstance(){ if(lazySingleton==null){ lazySingleton = new LazySingleton(); } return lazySingleton; } } //*首先对静态成员变量lazySingleton初始值赋予null,确保系统启动时没有额外的负载;其次 在getInstance时先判断lazySIngletons是否存在,若存在返回,步存在就在建立实例,需要注意的 是getInstance方法必须是synchronized的,否则在多线程的环境下, 但线程1正在运行时,完成赋值 操作前,线程2可能判断lazySingleton没有创建,线程2也将启动新建单例的程序,这样就导致多个 实例被创建,所以synchronized是必须的!使用上面的例子虽然实现了单例的延时加载,使用了同步 关键字,这在多线程环境下性能大大减弱,所以我们在优化下代码如下: public class LazySingleton{ pirvate LazySingleton(){ System.out.printl("这里创建单例很慢"); } private static class SingletonUtil{ private static LazySingleton instace = new LazySingleton(); } public static LazySingleton getInstace(){ return SingletonUtil.instace; } } //*在这种方式中,单例模式使用的内部静态类来维护自己的实例,当加载当前类的时候,其内部类,不 会被初始化,由于由于实例的建立是在类加载完成的,所以对多线程也是安全的,这里我们没有用 synchronized关键字,因此这种方式兼备以上两种方式的优点!
相关推荐
主要介绍了java 单例模式的相关资料,这里对懒汉式与饿汉式都做了实例介绍,需要的朋友可以参考下
java 单例模式(懒汉式与饿汉式).docx
Java单例模式,其中:单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种
一个简单的java工程,包含注释,一目了然,其中包含了单例模式的所有实现方式,懒汉式,饿汉式,双重校验,枚举,静态内部类等方式实现单例。
java 单例模式 饿汉式单例 对于饿汉模式,我们可这样理解:该单例类非常饿,迫切需要吃东西,所以它在类加载的时候就立即创建对象。 懒汉式单例类 对于懒汉模式,我们可以这样理解:该单例类非常懒,只有在自身...
java单例设计模式-饿汉式-懒汉式[参照].pdf
java单例设计模式-饿汉式-懒汉式[归纳].pdf
本文档比较清晰明了地介绍了懒汉式以及懒汉式(我要对象的时候才给我创建)和饿汉式(我不要对象的时候你也给我创建)的区别;懒汉式只有你调用返回对象的方法时才调用对象,饿汉式是在类加载的时候就创建了对象;...
单例模式是一种最简单的创建型设计模式,主要用于对系统资源的管理与控制,在软件开发...文中通过内容管理系统项目,深入剖析了几种常用的单例类,包括饿汉式单例类、懒汉式单例类的应用,优化设计了JAVA双重检查单例模式。
是http://blog.csdn.net/lxq_xsyu/article/category/1544127博客中java设计模式的源代码。下载前请先看《设计模式——单例模式》一文。
深入分析java单例模式什么是单例模式单例模式的常见写法一、饿汉式单例优点缺点示例二、懒汉式单例示例1(普通写法)示例2(synchronized写法)示例3(DCL写法)示例4(内部类写法)三、注册式单例示例1(容器式)示例2(枚举式...
。
。
通过Java语言,主要实现了六种单例的生成方法,包括懒汉式、饿汉式、双重校验锁、枚举、静态内部类,可以根据实际情况选择使用
通过学习java 简单总结单例模式与装饰者模式,做一下入门总结,主要讲述单例模式中饿汉式与懒汉式的相同点与不同点,方便理解记忆。
。
。
java实现的单例模式,包含懒汉式和饿汉式,适合java入口
本篇文章主要介绍了Java实现单例的3种普遍的模式,饿汉式、懒汉式、枚举式。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。