单例模式
2016-02-21 22:26
363 查看
本文转自:http://blog.csdn.net/silence1214/article/details/4033800
单例模式就是为了保证一个类只有一个实例,具体实现如下:
ex1:
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if (singleton== null)
{
singleton= new Singleton();
}
return singleton;
}
}
这个不多说了,肯定是错误的,如果多个线程访问的时候都死==null,那么接下来就是产生多个实例。不算单例模式。
ex2:
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if (singleton== null)
{
synchronized (Singleton.class) {
singleton= new Singleton();
}
}
return singleton;
}
}
这个虽然加了同步锁,但是如果多个线程同步访问==null,那么还是会产生多个实例,只是产生实例的时候同步而已。
ex3:
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
synchronized (Singleton.class)
{
if (singleton== null)
{
singleton= new Singleton();
}
}
return singleton;
}
}
这个就可以了,但是这个地方对于每个访问的这个方法都是同步,而最需要的同步只是在new的地方,所以这样做虽然保证了单例,但是效率有点低哦。
ex4:
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if (singleton== null)
{
synchronized (Singleton.class)
{
if (singleton== null)
{
singleton= new Singleton();
}
}
}
return singleton;
}
}
这个不错,保证了单例。这个叫做double-check 双重检查。
还有一个比较简单的写法。
ex5:
public class Singleton
{
private static final Singleton singleton = new Singleton();
private Singleton()
{
}
public static Singleton getInstance()
{
return singleton;
}
}
这样也可以,具体2种差别就不多说了。下面这个看起来要简单好多的哈
单例模式就是为了保证一个类只有一个实例,具体实现如下:
ex1:
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if (singleton== null)
{
singleton= new Singleton();
}
return singleton;
}
}
这个不多说了,肯定是错误的,如果多个线程访问的时候都死==null,那么接下来就是产生多个实例。不算单例模式。
ex2:
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if (singleton== null)
{
synchronized (Singleton.class) {
singleton= new Singleton();
}
}
return singleton;
}
}
这个虽然加了同步锁,但是如果多个线程同步访问==null,那么还是会产生多个实例,只是产生实例的时候同步而已。
ex3:
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
synchronized (Singleton.class)
{
if (singleton== null)
{
singleton= new Singleton();
}
}
return singleton;
}
}
这个就可以了,但是这个地方对于每个访问的这个方法都是同步,而最需要的同步只是在new的地方,所以这样做虽然保证了单例,但是效率有点低哦。
ex4:
public class Singleton
{
private static final Singleton singleton = null;
private Singleton()
{
}
public static Singleton getInstance()
{
if (singleton== null)
{
synchronized (Singleton.class)
{
if (singleton== null)
{
singleton= new Singleton();
}
}
}
return singleton;
}
}
这个不错,保证了单例。这个叫做double-check 双重检查。
还有一个比较简单的写法。
ex5:
public class Singleton
{
private static final Singleton singleton = new Singleton();
private Singleton()
{
}
public static Singleton getInstance()
{
return singleton;
}
}
这样也可以,具体2种差别就不多说了。下面这个看起来要简单好多的哈
相关文章推荐
- case...when语句使用
- PHP知识点——2
- PHP知识点——1
- C# 7 新特性-1
- 重新生成和组织索引
- 18-题目1069:查找学生信息
- python基础学习,基础语法总结
- iscsi 挂载网络存储及存储访问
- 【机房合作】单例模式实战
- Microsoft(R) Developer Studio 已停止工作 解决办法(1)
- Sublime Text 3 破解版 + 注册机 + 汉化包(转自 http://www.cnsecer.com/251.html)
- 设计模式理解
- hdoj 2080 夹角有多大II
- am335x嵌入式开发-bootloader启动流程
- URL之好资源整理(看云平台)
- .Net 框架
- android基础之六——多媒体编程
- Android Studio中导入Vitamio框架
- Hessian最佳实践
- 基础之ThreadStatic