设计模式----单例模式

来源:互联网 发布:数据汇总日语怎么说 编辑:程序博客网 时间:2024/06/02 00:17

 单例模式 共 懒汉式 饿汉式 双重检测锁 静态(static)内部类 枚举类5种实现方式 

 现在说每个方式的优缺点  
首先看一个大家随手就能写的 单例模式(懒汉式式的写法)


 但这个是非线程安全的 

 为了实现线程安全 懒汉式的升级写法 



 但这其实还是保证不了线程安全的 

 我们再进一步升级 



 这个还是有问题的 

 那懒汉究竟怎样才能线程安全呢 

 那就进入到进化变异版了 
 双重检测锁 


 之前很多人 知其一不知其二 ,说它不推荐使用。
 但错了 , 是1.5之前不推荐 , 1.5之后已经没这个问题了 。原因:因为jdk又花了,好像是哪个关键字吧----volatile (
 new不是个原子操作,后面优化了volatile语义,然后双重变的正常了 
 现在懒汉 和 双重检测锁 说完了 

 继续饿汉式 

 饿汉式本身是线程安全的 原因也很简单 

 饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。 

 现在看看代码就知道了 


 但是饿汉式有个缺点是不能延时加载 
 再说个静态内部类的实现 


 这个也是线程安全的 , 并且可以实现延时加载 , 也是最为常用的 。 但是它们都有一个致命缺陷。

 对 类的方式都可以被反射 , 被序列化破解 
这是枚举的形式


 线程安全,调用效率高,但是,不能延时加载 
 能不能延时加载 调用效率 和 线程安全问题 。是你考虑使用何种单例实现的考量 

 静态内部类方式 也是可以被破解的 

 如果你的项目是内部项目 没必要非得使用枚举式 , 毕竟它不能够延时加载 






0 0