黑马程序员技术交流社区

标题: 单例问题 [打印本页]

作者: 王运科    时间: 2012-4-23 17:06
标题: 单例问题
N个客户机掉一个单例会不会使系统性能下降。java单例是多线程。麻烦大家讲解一下

作者: 黑马-刘昌文    时间: 2012-4-23 17:49
不会,当你第一次调用单例的方法得到一个实例的时候,会创建这个类的实例,在内存中会为这个单例开辟一块空间,以后再调用,得到的只是这个类的引用,并不会再去创建它的实例!所以不会影响性能!
作者: 邱俊杰    时间: 2012-4-23 17:58
本帖最后由 邱俊杰 于 2012-4-23 18:00 编辑

单例有懒汉和饿汉、就顺便复习一下代码吧,
  1. 饿汉士:不过通常考的是懒汉士
  2. *class Single
  3. *{
  4. *                private static final Single s=new Single();
  5. *                private Single (){}
  6. *                public static Single gerInstance()
  7. *                {
  8. *                        return s;
  9. *                }
复制代码
这是饿汗士多线程执行的代码。
  1. // 懒汉士
  2. class Single
  3. {
  4.         private static Single s=null;
  5.         private Single(){}
  6.         public static Single getInstance()//如果多线程进入应该加锁、不然会创建多个对象,
  7.         {
  8.                 if(s==null)这里做了一次判断。所以楼主注意了,不会消耗资源性能
  9.                 {
  10.                         synchronized(Single.class)
  11.                         {
  12.                                 if(s==null)   
  13.                                 {
  14.                                         s=new Single();
  15.                                 }
  16.                         }
  17.                 }
  18.                 return s;
  19.         }
  20. }
复制代码

作者: 孙天    时间: 2012-4-23 21:08
饿汉式没有问题,懒汉式存在多线程并发访问的安全问题。所以需要同步线程安全问题,但是同步会降低效率。所以可以通过双重if判断的形式,解决效率问题,降低对锁的判断次数。所以在代码体现上较多。所以开发时,单例建议使用饿汉式
作者: 孙魁星    时间: 2012-4-23 21:12
单例是只会创建一个类的实例的,调用的是实例的引用。所以不会




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2