单例模式的误区
来源:互联网 发布:c语言中=和==的区别 编辑:程序博客网 时间:2024/06/05 01:52
单例模式是真的只有一个实例吗,这个问题是有范围的,在一个应用中是只有一个实例,如果换作是一个jvm,那么就不是一个实例了。因为,一个tomcat可以部署多个应用,在一个应用里面,不能有相同的类。但是在一个jvm里面,有多个应用,那么就会有多个有可能相同的类,所以单例就不现实了。
其实这种观点看似正确,给人很强的误导性,但并不准确。
因为 java 的对象实例化与 classloader 密切相关。
每个 classloader 都有自身的命名空间,在同一命名空间中是不允许同名类的。
就我们谈及的单例而言,在同一个 classloader 的命名空间中有且仅有一个实例。
所以,在一个 jvm 运行时,是有可能会包含实现单例模式类的多个实例的,它们只是处在不同的 classloader 命名空间中。
从思维的角度来说,即使不了解 jvm 和 classloader 原理层面的东西,也是可以判断出这个问题的答案。
平时工作中的业务应用部署基本都是基于 tomcat 容器的,大家都了解 tomcat 是可以同时部署多个应用的。
那么假设不同应用中如果包含了完全同名的类时,tomcat 在应用层面是有效隔离的。
反过来也佐证了,同名类的多个实例其实可以同时存在于一个 jvm 中。
所以这里谈的单例有个前提,是针对应用而言,同一个类的的实例对应用而言是唯一的,大部分的业务场景需求都是如此。
而如果参照对象是 jvm,那么对应用而言的单例其实对 jvm 而言是多例的。
0 0
- 单例模式的误区
- Builder模式的误区
- 设计模式:建模的误区
- 设计模式:建模的误区
- 设计模式 单例模式 优雅的单例模式
- 单例模式的同步
- 单例模式的例子
- Java的单例模式
- 单例模式的实现
- C ++的单例模式
- 单例模式的使用
- 单例模式的问题
- 单例模式的细化
- 单例模式的学习
- 单例模式的学习
- 经典的单例模式
- 实用的单例模式
- 单例模式的演进
- Java异常处理-----非运行时异常(受检异常)
- Java中IO流操作文件总结
- HDU 2289 Cup
- RDD Transformation——cartesian
- 第一个程序WZTick的设计目标
- 单例模式的误区
- Highcharts(一)之第一个Dome
- TCP UDP及socket编程学习(二)
- LeetCode 299. Bulls and Cows
- javaEE与java的区别
- [转]Java学习路线
- hdu 4528 小明系列故事——捉迷藏【Bfs】
- PID最通俗的理解和参数设置口诀
- 解决Your iOS Development certificate has been revoked.