话说java单例模式的饿汉式,懒汉式
2015-11-24 16:54
288 查看
饿汉式: //饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变, //这种单利模式比较简单,也比较可靠,唯一不足就是无法对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单例模式(Single)——饿汉式、懒汉式
- 简单java单例模式 懒汉式、饿汉式以及解决线程安全问题(synchronized)
- java单例模式中饿汉式与懒汉式区别
- Java单例模式:饿汉式和懒汉式的实现
- Java单例模式:饿汉式和懒汉式的实现
- java单例模式,懒汉式和饿汉式的区别,双层锁式等
- Java单例模式:饿汉式和懒汉式的实现
- Java单例模式的不同写法(懒汉式、饿汉式、双检锁、静态内部类、枚举)
- Java单例模式:饿汉式和懒汉式的实现
- Java单例模式--------懒汉式和饿汉式
- 单例模式的两种实现方式:懒汉式 饿汉式
- 饿汉式、懒汉式singleton模式
- JAVA 单态模式(饿汉式 懒汉式)
- java 单例模式:饿汉式与懒汉式 区别
- 单例模式中,懒汉式和饿汉式的区别
- 单例模式(饿汉式与懒汉式)
- 单例模式(饿汉式和懒汉式)
- 对于单例的学习总结,包括懒汉式和饿汉式的区别,比较浅显,可能有不足,希望大家多多指教。
- 单例设计模式-饿汉式-懒汉式