单例

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

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

样例

在 Java 中:

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

a 应等于 b.

挑战

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

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

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

具体的可以看百度百科

 class Solution {
/**
* @return: The same instance of this class every time
*/
private Solution(){};
private static volatile Solution instance;
static {
instance = new Solution();
}
public static Solution getInstance() {
return instance;
}
};

最新文章

  1. 2016/11/16 周三 <Web SQL Database基本使用方法(入门) >
  2. 【编程题目】题目:定义 Fibonacci 数列 输入 n,用最快的方法求该数列的第 n 项。
  3. C++ find 函数用法
  4. MySQL学习笔记--基本操作
  5. PHP批量删除做法
  6. 纸上谈兵:排序算法简介及C实现
  7. 笨方法学python 33课
  8. Flightgear 编译
  9. Java使用线程池递归压缩文件夹下面的所有子文件
  10. picturefill + picture 标签 实现兼容性很棒的 响应式图片 自适应 屏幕大小
  11. 原生js选项卡
  12. Windows下搭建Redis集群
  13. JSR107缓存规范
  14. date、sleep和usleep命令
  15. php 获取中文字符串首字母
  16. bzoj5011: [Jx2017]颜色
  17. Codeforces Beta Round #59 (Div. 2)
  18. AJPFX讲解外汇保证金交易的货币符号和外汇的报价方式
  19. C#中[] 、List、Array、ArrayList等数据结构的差异简述
  20. VS2010-自定义控件

热门文章

  1. http基础(1.了解web及网络基础,2.简单的http协议)
  2. WCF使用注意事项
  3. jenkins slave agent 当作服务运行
  4. idea ssm框架搭建
  5. 用例图(Use Case Diagram)
  6. 主成分分析(PCA)及其在R里的实现
  7. 【EverydaySport】健身笔记——静态牵拉
  8. java===java基础学习(15)---抽象,接口
  9. python基础===获取知乎标题时候,文件编码失败的总结
  10. 如何更新远程主机上的 Linux 内核