java设计模式之单例模式学习
发布时间:2020-12-14 05:19:03 所属栏目:Java 来源:网络整理
导读:1 概述 单例模式有几个好处: (1)某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。 (2)省去了new操作符,降低了系统内存的使用频率,减轻GC压力。 (3)有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全
1 概述 (1)某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。 (2)省去了new操作符,降低了系统内存的使用频率,减轻GC压力。 (3)有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。 2 详解 2.1 饿汉式 复制代码 代码如下: package org.scott.singleton; /** * @author Scott * @version 2013-11-16 * @description */ public class Singleton1 { private static Singleton1 uniqueInstance = new Singleton1(); private Singleton1(){ } public static Singleton1 getInstance(){ return uniqueInstance; } } 这样做的话,当JVM加载这个类的时候,根据初始化的顺序,就已经把对象创建好了。同时,JVM可以保证任何线程在访问这个单例对象之前,一定先创建此实例,并且只创建一次。 当然,也可以使用一个静态内部类来完成同样的功能。 复制代码 代码如下: package org.scott.singleton; /** * @author Scott * @version 2013-11-16 * @description */ public class Singleton2 { private Singleton2() { } /** * 此处使用一个内部类来维护单例 * */ private static class SingletonFactory { private static Singleton2 instance = new Singleton2(); } public static Singleton2 getInstance() { return SingletonFactory.instance; } /** * 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 * */ public Object readResolve() { return getInstance(); } } 2.2 双重锁方式 复制代码 代码如下: package org.scott.singleton; /** * @author Scott * @version 2013-11-16 * @description */ public class Singleton3 { private volatile static Singleton3 uniqueInstance; private Singleton3(){ } public static Singleton3 getInstance(){ if(uniqueInstance == null){ synchronized(Singleton3.class){ if(uniqueInstance == null){ uniqueInstance = new Singleton3(); } } } return uniqueInstance; } } 如果对性能要求比较高的话,这种方式可以大大减少创建的时间,目前来说,这种方式也是比较通用的一种创建单例的方式。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |