zoukankan      html  css  js  c++  java
  • 单例(LintCode) .

    单例

    单例 是最为最常见的设计模式之一。对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例。例如,对于 class Mouse (不是动物的mouse哦),我们应将其设计为 singleton 模式。

    你的任务是设计一个 getInstance 方法,对于给定的类,每次调用 getInstance 时,都可得到同一个实例。

    样例

    在 Java 中:

    A a = A.getInstance();
    A b = A.getInstance();
    

    a 应等于 b.

    挑战

    如果并发的调用 getInstance,你的程序也可以正确的执行么?

    首先肯定想到的是定义一个private static Solution成员,这样这个成员就独立于所有的实例了。我百度了一下,有一个关键字volatile。

    Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

    具体的可以看百度百科

     1 class Solution {
     2     /**
     3      * @return: The same instance of this class every time
     4      */
     5     private Solution(){};
     6     private static volatile Solution instance;
     7     static {
     8         instance = new Solution();
     9     }
    10     public static Solution getInstance() {
    11         return instance;
    12     }
    13 };
    View Code
  • 相关阅读:
    高并发的优化策略
    Linux Ctrl+c与ctrl+z的区别
    数据库连接池的工作原理
    JDBC数据库连接池原理
    JSP页面批量选择&全选操作&选择回显
    通过火狐谋智查询API
    通过console.log()打印window对象的属性、方法、事件
    制作 首页
    JavaScript 函数参数
    JavaScript 函数
  • 原文地址:https://www.cnblogs.com/FJH1994/p/5022272.html
Copyright © 2011-2022 走看看