博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例(LintCode)
阅读量:7095 次
发布时间:2019-06-28

本文共 848 字,大约阅读时间需要 2 分钟。

单例

单例 是最为最常见的设计模式之一。对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例。例如,对于 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

 

 

 

转载于:https://www.cnblogs.com/FJH1994/p/5022272.html

你可能感兴趣的文章
centos7+redis+php环境配置
查看>>
15.5. Json 内容展示
查看>>
Linux上的free命令详解
查看>>
吐槽一些技术想法和事情
查看>>
如何运行Hadoop自带的例子
查看>>
SAP HUM 如何看哪些HU还在923包装区尚未上架?
查看>>
sysresv
查看>>
SQL SERVER 重组含有特殊字符的索引时遇到“关键字 'with' 附近有语法错误.”...
查看>>
阿里巴巴跨物理界招人,世界级音频专家冯津伟入职人工智能团队iDST
查看>>
全球第四大航空南方航空与阿里云合作,成首家云上航空公司
查看>>
[20170727]library cache: mutex X.txt
查看>>
Shell 起停脚本
查看>>
[20171203]平均长度和虚拟列.txt
查看>>
LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
查看>>
java | HttpsURLConnection 实现https请求
查看>>
.Net自写Task进程监控程序
查看>>
75篇关于Tomcat源码和机制的文章
查看>>
dbca -silent -responsefile 建库由于tmpfs太小报错ORA-27102: out of memory
查看>>
数据科学面临的共同挑战有哪些?
查看>>
跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?
查看>>