//饿汉式: 类加载就创建对象
package
Run; class Main { public static void main(String[] args) { Single s = Single.getInstance(); Single ss = Single.getInstance(); System.out.println(s); System.out.println(ss); } } class Single{ static Single s = new Single(); private Single() {} public static Single getInstance() { return s;} }

note:

1.两个对象引用的地址一样,说明来自于同一对象。注意书写getInstance方法时,需要将其静态化,因为外界无法new对象,那么只能通过类来访问。

因为getInstance方法静态了,所以其访问的成员变量s也必须为静态。

2. 饿汉式在开发中更为常用, 因为其线程安全.

3.缺点:类加载就实例化,提前占用了系统资源.

 

/*
 * 懒汉模式,类加载还没有对象
 * 延迟加载 : delay-load
 */
class Single
{
    private static Single s = null;
    
    private Single() {}
    public static Single getInstance()
    {
        if ( s == null)
            s = new Single();
        return s;
    }
}

note:

1.线程不安全. 个人猜想,多个线程同时访问了getInstance(),导致创建了两个对象,并返回使用,导致对象不唯一.

2.优点: 饿汉式,其实是延迟加载(delay-load),只在第一次使用的时候进行实例化,延缓一时的系统资源紧张.

3.可经修改(同步锁???)更改为线程安全,但是其安全性下降.(Todo:学到多线程学习补充)

4.存在高性能线程安全的懒汉式单例的写法.(Todo:学到多线程学习补充)

posted on 2017-03-11 21:29  小明在努力  阅读(96)  评论(0编辑  收藏  举报