单例模式Singleton实现(C++&Java)
来源:互联网 发布:剑网三有挂机软件么 编辑:程序博客网 时间:2024/05/22 00:21
实现Singleton模式,分别用C++和Java实现。
首先C++:
class Singleton
{
private:
public:Singleton() {}
static Singleton* instance;
static Singleton* getInstance()
{
if(instance == NULL)
{
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = NULL;
考虑到线程安全和异常安全,进行下面的扩展:
Class Lock
{
private:
CCriticalSection m_cs;
public:
Lock(CCriticalSection cs) : m_cs(cs)
{
m_cs.Lock();
}
~Lock()
{
m_cs.Unlock();
}
};
Class Singleton
{
private:
static Singleton* instance;
Singleton()
{
}
static CCriticalSection cs;
public:
static Singleton* getInstance()
{
if(instance == NULL)
{
Lock(cs);
if(instance == NULL)
}instance = new Singleton();
return instance;
}
};
Singleton* Singleton::instance = NULL;
JAVA实现:
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if(instance == null) //1
instance = new Singleton(); //2
return instance;
}
}
不足:线程不安全,比如:
当线程1执行完1的时候,被挂起
线程2继续执行1,执行完1也被挂起
线程1恢复执行,创建出一个对象
线程2恢复执行,也创建出一个对象
所以会创建出两个实例。
改进:
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static synchronized Singleton getInstance() { //该函数被上锁,同一时刻只能被一个线程访问
if(instance == null) instance = new Singleton();
return instance;
}
}
不足:虽然是线程安全的,但是效率低下,一个时候只能被一个线程访问,不支持并发访问。
改进:
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null)
instance = new Singleton();
}
}
return instance;
}
}
线程安全,而且效率较高,支持多线程并发访问。
- 单例模式Singleton实现(C++&Java)
- Java 实现单例(Singleton)模式
- 【JAVA实现】单例模式(singleton)
- Objective C 实现Singleton(单例)模式.
- c++--Singleton单例模式的实现
- Singleton 单例模式学习 (c++)实现
- C++(Singleton)更高效单例模式实现
- 单例模式(Singleton)--Java实现
- Java单例模式(Singleton)以及实现
- 实现Singleton模式( 单例模式)
- 单例模式(java 实现 Singleton)(一)
- 单例模式(java 实现 Singleton)(二)
- (Singleton)单例模式的Java实现
- (Singleton)单例模式的Java实现
- Python Singleton(单例模式)实现
- Python Singleton(单例模式)实现
- c++-单例模式Singleton
- java单例模式(Singleton pattern)
- rtx任务间通信--信号量
- java项目实战-计算器(页面布局学习 添加事件)
- 设计模式 之 职责链
- 第二章线性表知识点导图
- epoll事件处理机制详解
- 单例模式Singleton实现(C++&Java)
- Django 安全漏洞
- Dice - HDU 5012 搜索
- leetcode:Construct Binary Tree from Preorder and Inorder Traversal
- rtx任务间通信--互斥量
- 自己动手写CPU之第八阶段(3)——转移指令实现过程1
- extjs4.0的高级组件tree上
- 将一行英文中每个单词首字母转换为大写字母
- HDU 2807 The Shortest Path