单例模式

Posted 学习笔记和总结

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。

Singleton

一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。

 

实现方式1:

public class SingletonClass{

    //内部产生该类唯一的实例,并对外界不可见
    private static final SingletonClass MyInstance = new SingletonClass();

    //私有的构造函数,防止被外界实例化
    private SingletonClass(){
    }

    //返回唯一实例的静态方法,供外界调用
    public static SingletonClass getInstance(){
        return MyInstance;
    }

}

---

实现方式2:

public class SingletonClass2{

    //私有的构造函数,防止被外界实例化
    private SingletonClass2(){
    }

    //静态内部类执行一次,保证线程安全
    private static class InstanceHolder{
        private static final SingletonClass2 MyInstance = new SingletonClass2();
    }

    //返回唯一实例的静态方法,供外界调用
    public static SingletonClass2 getInstance(){
        return InstanceHolder.MyInstance;
    }
}

---

测试类:

class SingletonTest implements Runnable {

    //倒计锁
    private static CountDownLatch latch = new CountDownLatch(1);

    //线程安全的Set
    static Set<String> set = new ConcurrentSkipListSet<String>();

    @Override
    public void run() {
        try {
            latch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        set.add(SingletonClass2.getInstance().toString());
    }

    public static void main(String[] args) throws Exception {

        for (int k = 0; k < 2000; k++) {
            SingletonTest tt = new SingletonTest();
            Thread t = new Thread(tt);
            t.start();
        }

        //释放锁
        latch.countDown();

        Thread.sleep(2000);

        System.out.println(set.size());
    }
}

---

输出:

1

说明只有一个类的实例。

 

end

以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

性能比较好的单例写法

片段作为 Android 中的单例

单例片段或保存网页视图状态

你熟悉的设计模式都有哪些?写出单例模式的实现代码

单例模式以及静态代码块