Java单例模式

来源:互联网 发布:业务数据运维管理规范 编辑:程序博客网 时间:2024/06/04 19:53

定义:

只产生一个实例对象,提供取得其对象的实例方法。


特点:
1.构造方法私有化(private);
2.在类内部生成实例对象;

3.通过类的静态方法获取该实例对象。

方式:

1.饿汉式

public class HungrySingleton {/* * 1.生成静态实例对象 */public static HungrySingleton hungrySingleton = new HungrySingleton();/* * 2.构造方法私有化 */private HungrySingleton() {}/* * 3.静态方法获取实例对象 */public static final HungrySingleton getInstance() {return hungrySingleton;}}

2.懒汉式

public class LazySingleton {/* * 1.生成静态实例对象 */public static LazySingleton lazySingleton = null;/* * 2.构造方法私有化 */private LazySingleton() {}/* * 3.静态方法获取实例对象 */public static LazySingleton getInctance() {if (lazySingleton == null) {/* sychronized用于代码块时需要一个锁对象,针对实例方法使用this对象; *//* 当针对类方法时可以使用该类对应的字节码文件对象,this这个时候不存在 */synchronized (LazySingleton.class) {lazySingleton = new LazySingleton();}}return lazySingleton;}}

分析饿汉式和懒汉式:
饿汉式是以预先加载方式加载对象,不管是单线程还是多线程都是线程安全的;
懒汉式则以延迟加载方式加载对象,单线程没有任何问题,如果是多线程则可能发生线程不安全,需要加上“互斥锁”;


饿汉式:对象预先加载,线程是安全的,在类创建好的同时对象生成,调用获得对象实例的方法反应速度快,代码简练。
懒汉式:对象延迟加载,效率高,只有在使用的时候才实例化对象,但若设计不当线程会不安全,代码相对于饿汉式复杂,第一次加载类对象的时候反应不快。

0 0
原创粉丝点击