线程安全的单例模式
来源:互联网 发布:淘宝千纸鹤什么档次 编辑:程序博客网 时间:2024/06/03 17:34
在我们项目中,很多时候需要程序只存在一个唯一实例。通常在项目中我会把单例模式写成如下形式
public class Singleton {
private static Singleton mSingleton;
private Singleton() {
}
public static Singleton getInstance() {
if (mSingleton == null) {
mSingleton = new Singleton();
}
return mSingleton;
}
}
通常以这种形式返回一个类的唯一实例,然而在Android开发中经常如果多线程开发。上面这种写法就不适合在多线程模式下运行了,会涉及到线程安全问题。因为很有可能两个线程同时会访问到getInstance()来创建实例。
因此我们使用线程同步来避免这一问题:
public class Singleton {
private static Singleton mSingleton;
private Singleton() {
}
public static Singleton getInstance() {
synchronized (Singleton.class) {
if (mSingleton == null) {
mSingleton = new Singleton();
}
}
return mSingleton;
}
}
如果多个线程访问时synchronized关键字,会一次只允许一个线程访问,其他线程先等待,恩,这确实避免了多线程同时访问带来的风险。那么又出现另一个问题,假如我项目复杂,线程多访问这个单例时一次只允许一个线程访问,其他线程等待,那性能上又存在很大的问题,每次实例时都得同步锁。
于是我们使用双从锁定,只在第一次类被实例化时判断 同步锁,解决线程安全,又解决效率问题
public class Singleton {
private static Singleton mSingleton;
private Singleton() {
}
public static Singleton getInstance() {
if (mSingleton == null) {
synchronized (Singleton.class) {
if (mSingleton == null) {
mSingleton = new Singleton();
}
}
}
return mSingleton;
}
}
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- Volatile 线程安全的单例模式
- 线程安全的单例模式
- 基于线程安全的单例模式
- 线程安全的单例模式
- 单例模式的线程安全
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式
- 线程安全的单例模式 [老生常谈]
- java线程安全的单例模式
- 线程安全的单例模式
- + 线程安全的单例模式
- hdu 5327 Olympiad (多校联赛) ——模拟
- cleaning selected projects has encountered a problem errors occurred during build
- HDU 1010 && ZOJ 2110--Tempter of the Bone【DFS && 奇偶剪枝】
- hdu 1010 dfs+剪枝
- MySQL--用户管理和权限
- 线程安全的单例模式
- KeyPress 和KeyDown 、KeyPress的区别
- MFC窗口变化消息( OnSize、OnSizing和OnGetMinMaxInfo)
- ExtJs中组件最好少使用ID属性(推荐更多使用Name属性)
- 社説 20150806 米の盗聴疑惑 同盟の信頼関係を揺るがすな
- 南邮 OJ 1601 数次统计
- 使用MySQL命令行修改密码
- uva 11987 Almost Union-Find (并查集)
- 浅谈HTTP中Get与Post的区别