设计模式
2014-01-04 14:12
197 查看
---------------------------------------------------------------------------------------------------
单例---饿汉式:
Single类一进内存,就已经创建好了对象。
class Single
{
private static Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
饿汉式,书写简单,而且是线程安全的,建议使用这种方式.
单例---懒汉式:
Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象.
对象是方法被调用时,才初始化,也叫做对象的延时加载.
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null) //使用双重判断,来减少对锁的访问次数.
{
synchronized(Single.class)
{
if(s==null)
s = new Single();
}
}
return s;
}
}
懒汉式,会产生线程安全的问题,可能产生多个实例对象,所以加锁以后,才能安全,代码麻烦,不建议使用.
懒汉式,将会形成面试的诸多考点:
1.延迟加载
2.线程安全问题,同步代码块和静态同步函数都行.
3.加同步的时候,使用的锁是哪一个?静态函数,肯定不能用this,用的是该类的Class对象.
4.双重判断+同步代码块,提高程序的效率.
5请写一个延迟加载的单例模式.
-----------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
单例---饿汉式:
Single类一进内存,就已经创建好了对象。
class Single
{
private static Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
饿汉式,书写简单,而且是线程安全的,建议使用这种方式.
单例---懒汉式:
Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象.
对象是方法被调用时,才初始化,也叫做对象的延时加载.
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null) //使用双重判断,来减少对锁的访问次数.
{
synchronized(Single.class)
{
if(s==null)
s = new Single();
}
}
return s;
}
}
懒汉式,会产生线程安全的问题,可能产生多个实例对象,所以加锁以后,才能安全,代码麻烦,不建议使用.
懒汉式,将会形成面试的诸多考点:
1.延迟加载
2.线程安全问题,同步代码块和静态同步函数都行.
3.加同步的时候,使用的锁是哪一个?静态函数,肯定不能用this,用的是该类的Class对象.
4.双重判断+同步代码块,提高程序的效率.
5请写一个延迟加载的单例模式.
-----------------------------------------------------------------------------------------------------
相关文章推荐
- PhoneGap2.9.0本地将html打包成Android应用
- C#在泛型类中,通过表达式树构造lambda表达式
- rsync 高级拷贝文件
- C#里面的值类型与引用类型的区别
- JUnit入门
- 正则表达式语法
- 正则表达式
- 庞峰Opencv学习(二)--对矩阵结构体CvMat的基本操作
- linux mount挂载设备(u盘,光盘,iso等 )使用说明
- PIL 中的 Image 模块
- C# 如何获取屏幕的截图,以及如何在图像上添加文字
- 图像处理:基础(模板、卷积运算)
- C++经典面试题
- C++ 06 继承与组合 (has-a is-a) 以及类大小的计算 虚基类对内存模型的影响(不考虑虚函数)
- 25个非常实用的jQuery/CSS3应用组件
- 机器视觉LED光源 选择
- malloc/free与new/delete的区别
- MVVM架构~Knockoutjs系列之js接收C#数据集合的方式
- C# 如何获取鼠标在屏幕上的位置,不论程序是否为活动状态
- CentOS6.4下Mysql数据库的安装与配置