最近公司的一个项目中大量的使用了java 单利模式,例如:public class Test{private Test instance;private Test(){
}public Test getInstance()
{
if(null == instance)
{
instance = new Test();
}
return instance;
}}我总感觉大量使用单利模式有点怪怪的感觉。请问各位大狭,一般在什么情况下使用单利模式呢?使用单利模式的好处有哪些呢?有哪些坏处呢和隐患呢?谢谢了!
}public Test getInstance()
{
if(null == instance)
{
instance = new Test();
}
return instance;
}}我总感觉大量使用单利模式有点怪怪的感觉。请问各位大狭,一般在什么情况下使用单利模式呢?使用单利模式的好处有哪些呢?有哪些坏处呢和隐患呢?谢谢了!
解决方案 »
- Unhandled Exception thrown: class org.springframework.dao.CannotAcquireLockExcep
- java 潜逃类
- HibernateTransactionManager与HibernateTemplater是什么关系,其中一个是否多余?
- hibernate总说映射不上怎么回事呢
- 请教WSDL用AXIS2生成Skeleton类都跑到了org.apache.axis2下面,要指定目录的话在WSDL中怎么改?谢
- 能帮忙列几个在上海的不错的公司吗
- 一个很多人遇到的问题(关于打包的)
- 如何验证CVS连接字符串合法
- 再帖:申请了一个虚拟主机,用java读写xml出现无权限的问题。
- druid远程连接sqlserver2000遇到以下问题,求解
- ssh2 如何判断保存是否成功
- Java泛型问题,求帮助.
帮你改了下,这样性能最好
public class Test{private Test instance = new Test();private Test(){
}public Test getInstance()
{
return instance;
}}
他是想用懒加载,不用一开始就加载进去!
不过楼主和2楼都有一个疏忽,就是没有把instance变量和getInstance()方法声明成static的,否者就不算单例了。1楼发现的问题的确存在,不过如果Test中没什么冲突的属性,也无所谓了,反正没同步最多就是多产生几个Test实例,最后instance还是只会指向一个。
至于楼主是选择2楼的一开始就加载,还是原来的懒加载,就看具体情况分析了!
这样可以了吧?
package src.com.fornew.tvm.unitmodule.valuecardreader.model;public class Test { private static Test instance; private Test() {
} public static Test getInstance() {
if (null == instance) {
synchronized(Test.class){
if(instance==null){
instance=new Test();
}
}
}
return instance;
}
}抛开我的这段代码不谈,各位楼主能够讲下单例模式的利与弊呢?那种情况下适合使用呢?
就框架而言Spring是管理单利最好不过的了,默认Spring帮你注入的都是采用单例的
另外单例模式比较节省资源,想想,如果每次去调用同一个方法,都要去new,那资源有多浪费,虽然说java有他一套的资源回收,但是学过java的人都知道,他的回收都是不定时,不可控制的,那单例模式就是可以避免在执行同一个方法时消耗过大,秉承一个原则:上下环境有,我就用环境的,没有,我才自己创建.好比吃饭用的碗筷一样,家里有就拿出来用就是了,没必要每次吃饭都上一次超市买一副回来再吃.
呵呵,我是用我的话说出来的,可能总结的不好,但还是凑合着看吧,大概重点就是这样了
类被加载时仍会将自己实例化。单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。
从速度和反应时间角度来讲,则比懒汉式单例类稍好些。然而,懒汉式单例类在实例化时,
必须处理好在多个线程同时首次引用此类时的访问限制问题,特别是当单例类作为资源控
制器,在实例化时必然涉及资源初始化,而资源初始化很有可能耗费时间。这意味着出现
多线程同时首次引用此类的机率变得较大。
饿汉式单例类可以在 Java 语言内实现,但不易在 C++内实现,因为静态初始化在 C++
里没有固定的顺序,因而静态的 m_instance 变量的初始化与类的加载顺序没有保证,可能
会出问题。饿汉式单例类更符合 Java 语言本身的特点。